[ 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)? |
[ Fenix @ 01.06.2004. 09:27 ] @
[ 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 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. Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|