[ Fenix @ 01.06.2004. 09:27 ] @
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)?
[ 4063 @ 03.06.2004. 12:23 ] @
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.
[ 4063 @ 03.06.2004. 12:25 ] @
Usput: nisam siguran da gornji kod radi 100%
[ idb @ 03.06.2004. 16:44 ] @
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....
[ igac @ 03.06.2004. 21:17 ] @
Citat:

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


... ljudi su izmislili EOF za to :)
[ Fenix @ 04.06.2004. 10:49 ] @
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).
[ ***ArChAnGeL*** @ 04.06.2004. 12:25 ] @
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?
[ scud @ 06.06.2004. 16:43 ] @
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?
[ idb @ 07.06.2004. 10:19 ] @
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.
[ scud @ 07.06.2004. 10:59 ] @
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.
[ idb @ 07.06.2004. 15:27 ] @
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.
[ scud @ 09.06.2004. 23:52 ] @
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
[ Marko Stankovic @ 10.06.2004. 18:27 ] @
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.
[ scud @ 11.06.2004. 01:26 ] @
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.
[ maxydelanoche @ 21.11.2006. 15:06 ] @
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.
[ X Files @ 21.11.2006. 19:10 ] @
Postoji .NET forum, a C# je deo toga.
[ dragansm @ 22.11.2006. 17:24 ] @
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 :)
[ Deyan_80 @ 14.12.2006. 12:02 ] @
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.