Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Editovanje velikih tekstova

[es] :: C++ programiranje :: C++ za početnike :: Editovanje velikih tekstova

[ Pregleda: 1505 | Odgovora: 10 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Pharos
Pančevo

Član broj: 20664
Poruke: 974
80.93.240.*



Profil

icon Editovanje velikih tekstova27.04.2006. u 19:08

Nikad ovo nisam znao da uradim u C-u :)
Potrebno je napraviti program koji će da pročita txt fajl koji ima oko 100.000 redova.
Da na početku svakog reda stavi n1, n2, n3... i da to snimi kao drugi fajl.
Ako imam

fajl1.txt
Code:

neki tekst
neki tekst
neki tekst
...


fajl2.txt treba da izgleda
Code:

n 1. neki tekst
n 2. neki tekst
n 3. neki tekst
...


Dal' postoji neko koga ne mrzi da okači ceo kod?

Hvala!
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
27.04.2006. u 19:08 

WEXY
Beograd

Član broj: 33948
Poruke: 138
*.smin.sezampro.yu.

Jabber: wexy@elitesecurity.org
ICQ: 166638118
Sajt: dhost.info/wexy


Profil

icon Re: Editovanje velikih tekstova27.04.2006. u 19:53
Code:
#include <stdio.h>

#define MAX_LENGHT 2048

int main (int argc, char* argv[])
{
    FILE* input;
    FILE* output;
    char temp_line[MAX_LENGHT];
    unsigned long i = 1;
    
    if (argc < 3)
    {
        printf ("Usage: evt-pharos.exe input_filename output_filename\n");
        return 0;
    }
    
    if ((input = fopen (argv[1], "r")) == NULL)
    {
        printf ("Error opening input file %s.", argv[1]);
        return 1;
    }
    
    if ((output = fopen (argv[2], "w")) == NULL)
    {
        printf ("Error opening output file %s.", argv[2]);
        return 1;
    }
    
    while (!(feof (input)))
    {
        fgets (temp_line, MAX_LENGHT, input);
        fprintf (output, "n %d. %s\n", i++, temp_line);
    }
    
    printf ("Done.\n");

    return 0;
}

"Nutri-matik je konstruisala i izradila Sirijuska kibernetska korporacija čije odeljenje za žalbe sada prekriva sve glavne kopnene mase prve tri planete zvezde Tau iz sistema Sirijusa"
- - - - - - - - - -
www.astronomija.co.yu
www.darksky.org
27.04.2006. u 19:53 

Pharos
Pančevo

Član broj: 20664
Poruke: 974
80.93.240.*



Profil

icon Re: Editovanje velikih tekstova27.04.2006. u 20:17
Hvala ti puno.
Jedino što ne treba da se stavlja \n između redova, ali ispravio sam to.
pOz
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
27.04.2006. u 20:17 

Pharos
Pančevo

Član broj: 20664
Poruke: 974
80.93.240.*



Profil

icon Re: Editovanje velikih tekstova28.04.2006. u 01:44
Malo sam prepravio tvoj kod. Ipak je ovo C++ forum :D
Code:

#include <iostream>
using namespace std;

#define MAX_LINE_LENGHT 2048
#define MAX_NUM_LENGTH 50
int main(int argc, char* argv[])
{

    FILE* input;
    FILE* output;
    char temp_line[MAX_LINE_LENGHT];
    char temp_string[MAX_LINE_LENGHT];
    char num_buffer[MAX_NUM_LENGTH];
    
    if(argc<3)
    {
        cout << "Usage: app_name.exe input_filename output_filename" << endl;
        return 1;
    }
    if(!(input=fopen(argv[1],"r")))
    {
        cout << "Error opening input file " << argv[1] << endl;
        return 2;
    }
    if(!(output=fopen(argv[2],"w")))
    {
        cout << "Error opening output file " << argv[2] << endl;
        return 3;
    }
    
    while(!(feof(input)))
    {
        static unsigned long i = 0;
        strcpy(temp_string,"n ");
        itoa(++i,num_buffer,10);
        strcat(temp_string,num_buffer);
        strcat(temp_string,". ");
        fgets (temp_line, MAX_LINE_LENGHT, input);
        strcat(temp_string,temp_line);
        fputs(temp_string,output);
    }

    fclose(output); fclose(input);
    cout << "Done." << endl;

    return 0;
}

Zanima me da li može da se optimizuje ovaj kod.
Mnogo mi je to koda.
U Perl-u je mnogo manje :)
Hvala!


[Ovu poruku je menjao Pharos dana 28.04.2006. u 02:51 GMT+1]
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
28.04.2006. u 01:44 

WEXY
Beograd

Član broj: 33948
Poruke: 138
*.smin.sezampro.yu.

Jabber: wexy@elitesecurity.org
ICQ: 166638118
Sajt: dhost.info/wexy


Profil

icon Re: Editovanje velikih tekstova28.04.2006. u 02:19
Citat:
#1130408/Pharos: Nikad ovo nisam znao da uradim u C-u :)
...


Pitao si za C, a i opet nije skroz C++ :)

Sad mi je kasno da kucam, postaviću sutra rešenje.
"Nutri-matik je konstruisala i izradila Sirijuska kibernetska korporacija čije odeljenje za žalbe sada prekriva sve glavne kopnene mase prve tri planete zvezde Tau iz sistema Sirijusa"
- - - - - - - - - -
www.astronomija.co.yu
www.darksky.org
28.04.2006. u 02:19 

WEXY
Beograd

Član broj: 33948
Poruke: 138
*.smin.sezampro.yu.

Jabber: wexy@elitesecurity.org
ICQ: 166638118
Sajt: dhost.info/wexy


Profil

icon Re: Editovanje velikih tekstova28.04.2006. u 17:35
Code:
#include <iostream>
#include <fstream>

using namespace std;

const int MAX_LENGHT = 2048;

int main (int argc, char* argv[])
{
    if (argc < 3)
    {
        cout << "Usage: evt-pharos-cpp.exe input_filename output_filename." << endl;
        return 0;
    }

    ifstream input;
    input.open (argv[1]);

    if (!input.is_open ())
    {
        cout << "Error opening file `" << argv[1] << "' for input!" << endl;
        return 1;
    }

    ofstream output;
    output.open (argv[2]);

    if (!output.is_open ())
    {
        cout << "Error opening file `" << argv[2] << "' for output!" << endl;
        return 1;
    }

    char* temp_line = new char [MAX_LENGHT + 1];
    long i = 1;

    while (!input.eof ())
    {
        input.getline (temp_line, MAX_LENGHT);
        output << "n " << i++ << ". " << temp_line << endl;
        
        temp_line[0] = 0;
    }

    delete [] temp_line;

    input.close ();
    output.close ();

    cout << "Done." << endl;

    return 0;
}


[Ovu poruku je menjao WEXY dana 28.04.2006. u 18:37 GMT+1]
"Nutri-matik je konstruisala i izradila Sirijuska kibernetska korporacija čije odeljenje za žalbe sada prekriva sve glavne kopnene mase prve tri planete zvezde Tau iz sistema Sirijusa"
- - - - - - - - - -
www.astronomija.co.yu
www.darksky.org
28.04.2006. u 17:35 

Pharos
Pančevo

Član broj: 20664
Poruke: 974
80.93.240.*



Profil

icon Re: Editovanje velikih tekstova28.04.2006. u 18:48
Svaka čast!
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
28.04.2006. u 18:48 

Function
Amel Music
BiH

Član broj: 26785
Poruke: 27
85.158.39.*



Profil

icon Re: Editovanje velikih tekstova29.04.2006. u 11:14
A zašto ne koristite string klasu mjesto char*?
It's important that you never stop asking questions!
29.04.2006. u 11:14 

pcaca
Aleksandar
Makedonija

Član broj: 5333
Poruke: 79
62.162.233.*



Profil

icon Re: Editovanje velikih tekstova29.04.2006. u 16:13
Citat:
#1132294/Function: A zašto ne koristite string klasu mjesto char*?

I ja mislim da je karakterni niz naslegjen iz C-a. U C++ koriste se stringovi.
Code:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main (int argc, char* argv[])
{
    if (argc < 3) {
        cout << "Usage: " << argv[0] << " input_filename output_filename." << endl;
        return 0;
    }

    ifstream input(argv[1]);

    if (!input) {
        cout << "Error opening file \"" << argv[1] << "\" for input!" << endl;
        return 1;
    }

    ofstream output(argv[2]);

    if (!output) {
        cout << "Error opening file \"" << argv[2] << "\" for output!" << endl;
        return 1;
    }

    string temp_line;
    unsigned long i = 1;

    while (getline (input, temp_line))
        output << "n " << i++ << ". " << temp_line << endl;

    input.close ();
    output.close ();

    cout << "Done." << endl;

    return 0;
}

Ovo je nesto kraci kod.

PS: Mozda je moguce da se uradi neshto i sa "stream iteratorima" ali sada nemam dovolno vremena da testiram.

[Ovu poruku je menjao pcaca dana 29.04.2006. u 17:13 GMT+1]
29.04.2006. u 16:13 

leka
Dejan Lekić
senior software engineer, 3Developers Ltd.
London, UK

Član broj: 234
Poruke: 2530
..81.static.rny.vf.siwnet.net.

Sajt: dejan.lekic.org


Profil

icon Re: Editovanje velikih tekstova04.05.2006. u 09:23
Ne mora da znaci da je kod vise C++ ako covek korist iostream, a da NIJE C++ ako koristi STDC pozive... Za ovako trivijalan program je prvo wexy-jevo resenje najbolje. Evo uzmite sami pa uporedite C i C++ verziju... C++ verzija je 2x veca, sa gomilom bezveznih << i >> . Okej, ja volim C++, ali ne mora se uvek pristupiti resavanju problema na C++, objektno orjentisan nacin. No, to je licno misljenje...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
04.05.2006. u 09:23 

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 277
..taman-bg.customer.sbb.co.yu.



Profil

icon Re: Editovanje velikih tekstova08.05.2006. u 23:33
Zar je i jedan dati primer imao i jednu osobinu OOP-a. U ovim slucajevima smo samo imali razlicite jezike, koristene na isti (proceduralan)nacin. Ali izgleda da je univerzalno pravilo - ako zelite manji fajl, bolje je da inkludujete stdio.h nego iostream.

[Ovu poruku je menjao DjoleReject dana 09.05.2006. u 00:34 GMT+1]
De si Deda...
08.05.2006. u 23:33 

[es] :: C++ programiranje :: C++ za početnike :: Editovanje velikih tekstova

[ Pregleda: 1505 | Odgovora: 10 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.