• 17 odgovora
  • 10.099 pregleda
pisanje-citanje u tekstualni fajl 01.06.2004. u 09:27 · pre 272 meseci #1
Moze li neko navesti (najbolje konkretan primjer) kako da podatke iz txt fajla ucitam u neki niz (podaci u fajlu odvojeni novim redom) i obrnuto (iz niza snimim u txt fajl)?
Re: pisanje-citanje u tekstualni fajl 03.06.2004. u 12:23 · pre 272 meseci #2
Ako znas koliko ima linija u fajlu, to je jednostavno:

Code:

#define BROJ_LINIJA 100

char *Tabela[BROJ_LINIJA];

void ucitaj() {
FILE *dat = fopen("fajl.txt", "r");
char tmp[200];
     for(int i=0; i<BROJ_LINIJA; i++) {
         fgets(tmp, 199, dat); 
         Tabela[i] = new char[strlen(tmp)+1];
         strcpy(Tabela[i], tmp); 
     }
fclose(dat);
}

void pisi() {
FILE *dat = fopen("fajl.txt", "w");
     for(int i=0; i<BROJ_LINIJA; i++) {
          fputs(tmp, dat); 
fclose(dat);
}


Ako ne znas duzinu fajla u linijama, postaje malo komplikovanije. Jedan nacin je da kosristis listu, a da svaki clan sadrzi jednu liniju.

Drugi nacin je da citav fajl procitas binarno u jedan string. Svaka ce ti linija biti odvojena sa '\n' i/ili '\r'. Pa smisli kako ces skenirati za svoje potrebe. Ovo ti postaje komplikovanije ako pocnes da ubacivas nove linije ili nesto slicno.
Potpis
http://www.maspic.netfirms.com/
Re: pisanje-citanje u tekstualni fajl 03.06.2004. u 16:44 · pre 272 meseci #4
Citat:
kako da podatke iz txt fajla ucitam u neki niz
Kog tipa su podaci?
Koliko ce biti dugacki redovi u TXT fajli (ima li ogranicenja)?
....?
Sve u svemu, daj malo vise podataka....
Re: pisanje-citanje u tekstualni fajl 03.06.2004. u 21:17 · pre 272 meseci #5
Citat:

Ako ne znas duzinu fajla u linijama, postaje malo komplikovanije.


... ljudi su izmislili EOF za to :)
Potpis
"nice town, i'll take it..."
Re: pisanje-citanje u tekstualni fajl 04.06.2004. u 10:49 · pre 272 meseci #6
Citat:
idb:Kog tipa su podaci?
Koliko ce biti dugacki redovi u TXT fajli (ima li ogranicenja)?
....?
Sve u svemu, daj malo vise podataka....



Tip podataka, ASCII stringovi (recimo notepad-ov txt fajl).
Redovi su različite dužine, mogu eventualno imati podatak o dužini najdužeg među njima, ako to nešto pomaže.
Poznata je dužina fajla u linijama (broj redova).
Re: pisanje-citanje u tekstualni fajl 04.06.2004. u 12:25 · pre 272 meseci #7
Citat:
idb:Kog tipa su podaci?
Koliko ce biti dugacki redovi u TXT fajli (ima li ogranicenja)?
....?
Sve u svemu, daj malo vise podataka....


Nisam bas siguran koga tipa mogu da budu podatci u txt file-u sem char?
Re: pisanje-citanje u tekstualni fajl 06.06.2004. u 16:43 · pre 272 meseci #8
Ova tema tacno odgovara mojoj nedoumici... Kako textualni fajl azurirati? Odnosno u datoteku koju smo recimo otvorili za citanje i za pisanje, bi trebao da unesem izmene nekih stringova koji su razlicite duzine, tacnije trebao bi da zamenim kraci string duzim stringom koji se nalazi negde u textu na neodredjenom mestu (znaci treba naci string koji menjamo). Kako ovo izvesti?
Re: pisanje-citanje u tekstualni fajl 07.06.2004. u 10:19 · pre 272 meseci #9
Ako te problem jos uvek muci, evo ti nesto u C stilu:
Code:
/*Windows 2000, Dev-Cpp 4.9.8.9*/
#include <stdio.h>
#define MAXB 999

struct ss{
    char lin[MAXB];
} my_lin[100];

int main(int argc, char *argv[])
{
    int i=0,j;
    /* Ucitaj redove */
    FILE * fu = fopen( "oldfile.txt", "r" );
    while (!feof(fu)) fgets(my_lin[i++].lin,MAXB,fu);
    fclose(fu);

    /* Upisi redove u drugi fajl */
    FILE * fi = fopen( "newfile.txt", "w" );
    for (j=0;j<i;j++) fputs(my_lin[j].lin,fi);
    fclose(fi);
    system("PAUSE");    
    return 0;
}


Obrati paznju da fgets(..) ucitava i znak za novi red pa ces ga verovatno morati brisati.
Re: pisanje-citanje u tekstualni fajl 07.06.2004. u 10:59 · pre 272 meseci #10
Hvala na kodu, ali moje pitanje je bilo kako to izvesti kada otvorimo jednu jedinu datoteku u kojoj je text koji zelimo menjati. Znaci pretpostavka je da je datoteka otvorena sa fopen("datoteka.txt", "r+t") znaci sa opcijom citanje i pisanje u nju istovremeno. Takav kod sto si paste-ovao sam bas i ja napisao, ali ja zelim da ne kreiram novu datoteku. U tome je caka :) Ali ok, kazem hvala jos jednom na kodu, pokusacu nekako da se snadjem.
Re: pisanje-citanje u tekstualni fajl 07.06.2004. u 15:27 · pre 272 meseci #11
Mozda je ovo resenje:
Klasa wxTextFile (http://www.wxwindows.org/manuals/2.4.2/wx385.htm)
iz wxWidgets-a ( http://www.wxwindows.org/ ) sadrzi funkcije koje mogu da pristupe bilo kojoj liniji u TXT fajlu. Redove mozes brisati, insertovati nove (na bilo koje mesto), dodavati nove na kraj fajla,..

..., naravno sve to radi ako koristis wxWidgets, a ne koristi ga puno ljudi.
Re: pisanje-citanje u tekstualni fajl 09.06.2004. u 23:52 · pre 272 meseci #12
Prosto ne mogu da verujem da ne moze to da se izvede pomocu STL-a! Ustvari siguran sam da moze, samo treba znati kako... hmmm
Re: pisanje-citanje u tekstualni fajl 10.06.2004. u 18:27 · pre 272 meseci #13
Mozda postoji i neko elegantnije resenje za tvoj problem ali recimo mozes da stvoris neki privremeni fajl u koji ces da prepises tu datoteku sa izmenjenim sadrzajem i na kraju otvoris prvu datoteku iskljucivo za pisanje, znaci sa rezimom "w" a ne "a", i prepises u nju celu privremenu datoteku.

Ako radis ovako onda ti preporucujem da pogledas funkciju tmpfile, njeno zaglavlje je:

FILE *tmpfile(void);

i zaglavlje se nalazi u stdio.h.

Funkcija kreira privremenu datoteku sa rezimom "w+" koji ce biti obrisan kada budu zatvorene sve reference ka njemu.
Nadam se da ce ti ovo pomoci, ako ne kazi pa da smislimo nesto drugo.
Potpis
I drink to make other people interesting.
Re: pisanje-citanje u tekstualni fajl 11.06.2004. u 01:26 · pre 272 meseci #14
E ok je ovaj tvoj predlog. Tako sam i uradio inace. Samo me je zanimalo da li je moguce intervenisati sve u jednom te istom fajlu koristeci STL.
Re: pisanje-citanje u tekstualni fajl 21.11.2006. u 15:06 · pre 242 meseci #15
Kako ucitati podatke iz .txt fajla, tip integer, poznat broj tih int varijabli, ali programski jezik C#???

P.S. Ne znam da li postoji podforum za C# na ES-u, pa sam ovde postavila pitanje.
Re: pisanje-citanje u tekstualni fajl 22.11.2006. u 17:24 · pre 242 meseci #17
Code:

  char text[] = "blabla";
  char buffer[2049];
  buffer[2048] = 0;
  FILE *f = fopen( "c:\\temp.txt", "r+t" );
  if ( f )
  {
    int nRead = fread( buffer, 1, 2048, f  );
    printf( buffer );
    fseek ( f, 0, SEEK_SET );
    fwrite( text, sizeof( text ), 1, f );
    fseek ( f, 0, SEEK_SET );
    nRead = fread( buffer, 1, 2048, f  );
    printf( buffer );
    fclose( f );
  }

Otprilike kako mozes da "pises-brises"
Neko je pomenuo stl (ako sam dobro upamtio)... stl nema nesto preterano veze sa ovim :)
Re: pisanje-citanje u tekstualni fajl 14.12.2006. u 12:02 · pre 241 meseci #18
Da citas iz fajla koristi f-ju fscanf a kao sto je neko pre mene naveo

while(!feof(IMEFAJLA)){

fscanf(IMEFAJLA,"%s",&a)
}

a - promenljiva u koju upisujes stringove

Mozes umesto %s da navedes %c pa ce ti upisivati karaktere.

Ovako ti nije bitno koliko linija imas posto while ide do kraja fajla.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme