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

Editovanje velikih tekstova

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

[ Pregleda: 4587 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Pharos
Pančevo

Član broj: 20664
Poruke: 1029
80.93.240.*



+2 Profil

icon Editovanje velikih tekstova27.04.2006. u 19:08 - pre 218 meseci
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
 
Odgovor na temu

WEXY
Beograd

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

ICQ: 166638118


+7 Profil

icon Re: Editovanje velikih tekstova27.04.2006. u 19:53 - pre 218 meseci
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"
 
Odgovor na temu

Pharos
Pančevo

Član broj: 20664
Poruke: 1029
80.93.240.*



+2 Profil

icon Re: Editovanje velikih tekstova27.04.2006. u 20:17 - pre 218 meseci
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
 
Odgovor na temu

Pharos
Pančevo

Član broj: 20664
Poruke: 1029
80.93.240.*



+2 Profil

icon Re: Editovanje velikih tekstova28.04.2006. u 01:44 - pre 218 meseci
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
 
Odgovor na temu

WEXY
Beograd

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

ICQ: 166638118


+7 Profil

icon Re: Editovanje velikih tekstova28.04.2006. u 02:19 - pre 218 meseci
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"
 
Odgovor na temu

WEXY
Beograd

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

ICQ: 166638118


+7 Profil

icon Re: Editovanje velikih tekstova28.04.2006. u 17:35 - pre 218 meseci
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"
 
Odgovor na temu

Pharos
Pančevo

Član broj: 20664
Poruke: 1029
80.93.240.*



+2 Profil

icon Re: Editovanje velikih tekstova28.04.2006. u 18:48 - pre 218 meseci
Svaka čast!
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
 
Odgovor na temu

Function
Amel Music
//none
BiH

Član broj: 26785
Poruke: 27
85.158.39.*



Profil

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

pcaca
Aleksandar
Makedonija

Član broj: 5333
Poruke: 92
62.162.233.*



Profil

icon Re: Editovanje velikih tekstova29.04.2006. u 16:13 - pre 218 meseci
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]
 
Odgovor na temu

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

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

Sajt: dejan.lekic.org


+2 Profil

icon Re: Editovanje velikih tekstova04.05.2006. u 09:23 - pre 218 meseci
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
 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

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



+1 Profil

icon Re: Editovanje velikih tekstova08.05.2006. u 23:33 - pre 218 meseci
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...
 
Odgovor na temu

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

[ Pregleda: 4587 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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