Hello!
Csak az elnne a kérdésem hogy van-e olyan függvény v. eljárás, amivel lehet visszafelé olvasni a fájlt.
Előre is köszike.
- 2640 megtekintés
Hozzászólások
Én nem tudok róla, de ha időigényesre akarod, akkor akkor mindig az n-i. sorig olvasol (n a sorok száma értelemszerűen), ha pedig tárigényesre (vagy az egészet úgyis változókba/tömbbe írod), akkor ha megnézed előre, hogy hány sor, akkor kreálsz neki egy tömböt, amit visszafelé töltesz föl. Dinamikus foglalásnál ez értelemszerűen nem játszik. (Szerk.: olyankor meg értelemszerűen egy tömbbe olvasod soronként, aztán egy ciklussal végigszaladva átírod egy másik tömbbe, és violá!)
:: by BRI.
:: config :: Acer TravelMate // Ubuntu Intrepid
:: tothab [a] gmail [pötty] kom
:: black rose immortal's weblog
- A hozzászóláshoz be kell jelentkezni
Pl. mmap()-eld be, es ott mar ugy olvasod, ahogy akarod.
--
Fontos feladatot soha ne bizz olyan gepre, amit egyedul is fel tudsz emelni!
- A hozzászóláshoz be kell jelentkezni
Beolvasod valamilyen tárolóba és a végéről előre
végigmész rajta?
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Szerintem elsőre építs egy indexet a file-ra (melyik sor hol kezdődik, lehet akár egy vector-ban is), majd visszafele haladva std::getline()-al olvasd be a sort.
"If you must mount the gallows, give a jest to the crowd, a coin to the hangman, and make the drop with a smile on your lips" The Wheel of Time series
- A hozzászóláshoz be kell jelentkezni
Elérkezett a kötelező programok időszaka? :)
Valamelyik ismerősömnek volt ilyen feladata, és okosan kellett megoldani az olvasást, hogy az időlimitbe is beférjen.
Úgy emlékszem buffert használtunk: a memóriába olvastuk a végétől számított valahány kilobájtot, majd abban már gyorsan lehet akár bájtonként is lépkedni visszafele. Ahogy az elejére ér a buffernek, akkor a fájl vége előtti bufferméretnyit kell beolvasni......
Pár for ciklus az egész szinte... csak a fájl méretét kell előtte kiolvasni. Eljárással/objektummal megoldható, hogy sima olvasáshoz hasonló egyszerűséggel használd.
Ha egyenként olvasol a lemezről értékeket, az nagyon lassú...
- A hozzászóláshoz be kell jelentkezni
Elérkezett a kötelező programok időszaka? :)
+1. ha ez a helyzet, akkor van vegtelensok megoldas ami kozul lehet valogatni, lasd feljebb.
ha komoly/e'les a problema, akkor az mar megint egy mas kerdes.
- A hozzászóláshoz be kell jelentkezni
Hello!
Nem tudom mennyire lehet opció az a megoldás hogy fogod és a fájlodat beolvasod egy verembe.A verem működéséből adódóan úgy is a legutolsó beírt elemet veheted ki elöször. Így megvalósul amit te szeretnél.
Üdv.
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
Ha csak egyszer szabad végigolvasnod és nem teheted memóriába, akkor seekelj a végére majd visszafele seekelgetve keresd meg a sortöréseket. Nem lesz hatékony, de működni fog.
- A hozzászóláshoz be kell jelentkezni
honnan jön a "sortörések" ?
- A hozzászóláshoz be kell jelentkezni
Ha valamit soronkent kell olvasni, az azt jelenti, hogy a tesztfajlban vannak \n karakterek.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
és hol került említésre hogy valamit soronként kell olvasni?
- A hozzászóláshoz be kell jelentkezni
a címben?
- A hozzászóláshoz be kell jelentkezni
óhbazzz:)
(tényleg nem értettem miért akar mindenki soronként olvasni :) )
- A hozzászóláshoz be kell jelentkezni
Próbáld ki ezt a programot:
main.c :
#include < stdio.h >
#include < stdlib.h >
int main() {
FILE* f;
f = fopen("proba.txt", "r");
unsigned int i;
unsigned char c;
long pos;
i = 1;
do {
fseek(f, -i, SEEK_END);
pos = ftell(f);
c = fgetc(f);
printf("%c\n", c);
i++;
} while (pos > 0);
return 0;
}
--------------------------------------------------------
proba.txt :
abcdefghi
- A hozzászóláshoz be kell jelentkezni
Nagyon elvetemult, biztosan egyest ero megoldas:
ird meg ugy a C programot, hogy atpipeolja a bemenetet "rev" -en, es annak a kimenetet olvassa soronkent.
(manolando oldalak: popen, fread)
- A hozzászóláshoz be kell jelentkezni
a rev a soron belüli karakterek sorrendjét fordítja meg. valószínűleg ide a tac kellene, az csak a sorokat fordítja meg.
- A hozzászóláshoz be kell jelentkezni
Csinálsz egy buffert (malloc), amibe olvasni fogsz a filéből (hátulról, kezdetben üres).
Ha van \n a bufferben, akkor adod az utolsó sort, szükség szerint rendezkedsz a bufferben. (Először nincs \n.)
Ha nincs \n a bufferben, de van üres hely, akkor olvasol. (Olvasás: pozícionálás lseek-kel, utána read.)
Ha nincs \n és nincs hely sem, akkor növeled a buffert (realloc) és olvasol.
Ha vége a filének, akkor a buffer tartalma az utolsó (valójában első) sor.
--
CCC3
- A hozzászóláshoz be kell jelentkezni