Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 10 odgovora
  • 6.336 pregleda

Najnovija ↓

Editovanje velikih tekstova 27.04.2006. u 20:08 · pre 249 meseci #1
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!
Potpis
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
Re: Editovanje velikih tekstova 27.04.2006. u 20:53 · pre 249 meseci #2
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;
}
Potpis
"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"
Re: Editovanje velikih tekstova 27.04.2006. u 21:17 · pre 249 meseci #3
Hvala ti puno.
Jedino što ne treba da se stavlja \n između redova, ali ispravio sam to.
pOz
Potpis
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
Re: Editovanje velikih tekstova 28.04.2006. u 02:44 · pre 249 meseci
izmenjeno 1 put, poslednji put Pharos 28.04.2006. u 02:51
  1. Pharos28.04.2006. u 02:51zapis iz teksta poruke
#4
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!
Potpis
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
Re: Editovanje velikih tekstova 28.04.2006. u 03:19 · pre 249 meseci #5
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.
Potpis
"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"
Re: Editovanje velikih tekstova 28.04.2006. u 18:35 · pre 249 meseci
izmenjeno 1 put, poslednji put WEXY 28.04.2006. u 18:37
  1. WEXY28.04.2006. u 18:37zapis iz teksta poruke
#6
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;
}
Potpis
"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"
Re: Editovanje velikih tekstova 29.04.2006. u 12:14 · pre 249 meseci #8
A zašto ne koristite string klasu mjesto char*?
Potpis
It's important that you never stop asking questions!
Re: Editovanje velikih tekstova 29.04.2006. u 17:13 · pre 249 meseci
izmenjeno 1 put, poslednji put pcaca 29.04.2006. u 17:13
  1. pcaca29.04.2006. u 17:13zapis iz teksta poruke
#9
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.
Re: Editovanje velikih tekstova 04.05.2006. u 10:23 · pre 249 meseci #10
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...
Potpis
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
Re: Editovanje velikih tekstova 09.05.2006. u 00:33 · pre 249 meseci
izmenjeno 1 put, poslednji put DjoleReject 09.05.2006. u 00:34
  1. DjoleReject09.05.2006. u 00:34zapis iz teksta poruke
#11
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.
Potpis
De si Deda...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme