Nagy txt fájlokat, hogy kell kezelni c-ben?
Egy érdekes problémám akadt. Van egy 30Mb-os txt fájlom ami számokat tartalmaz, de talán nem is a mérete a fontos, hanem az hogy kb 540 ezer sor van benne és a kis algoritmus amit írtam módosít rajtuk és kiírja őket egy új fájlba.
Nem kell semmi bonyolult műveleten gondolkodni egyszerűen pl a ; karaktereket kicserélem sima , -re, meg ilyenek, csak hogy beírtam a beolvasó ciklusba hogy 540 000-ig fusson a ciklus, de amikor leakarom futtatni akkor az írja ki, hogy a program leállt és megoldást keres.....
Szóval kipróbáltam azt hogy átteszem az 20 ezer sort egy másik txt-be és azon futtatom le a programot. Akkor működött!
Megcsinálnám 40-szer ugyanezt csak kicsit lusta vagyok mindig 20000 soronként menni. Van erre megoldás, hogy a nagyobb fájlokkal is ilyen szépen dolgozhasson?
int *k;
int _1G = 1024*1024;
for(int i = 0; i < _1G; ++i){
k = new int[100];
}
igaz c++ de a memóriát felzabálja, pedig csak 100 int típusú változónak foglal helyet egyszerre.
A másik ok lehet az, hogy túlindexelted a tömböt, amit használsz.
Hopp. Lemaradott egy 1024-es szorzó a _1G-ből :)
Szóval unsigned int _1G = 1024*1024*1024, valamint a ciklusba unsigned int a ciklusváltozó. Késő van már ehhez...
Beolvasod tömbbe az összes elemet? A C++ valahogy nem szereti a nagy méretű tömböket (bár a dinamikus memóriában nincs gondja velük, úgyhogy nem értem...). Mindenesetre ha az egyes sorok módosításai egymástól függetlenül elvégezhetők (pl. nem rendezel), akkor a következő módszer jobban működne:
1) Megnyitod a bemeneti és a kimeneti fájlt.
2) Ciklus amíg nem értünk a bemeneti fájl végére
3) Sor beolvasása
4) Beolvasott sor módosítása
5) Módosított sor kiírása
6) Ciklus vége
7) Bemeneti és kimeneti fájl bezárása
Ha adnál kódot, az egyébként sokat segítene.
"A C++ valahogy nem szereti a nagy méretű tömböket (bár a dinamikus memóriában nincs gondja velük, úgyhogy nem értem...)."
Ez azért van, mert a nem-dinamikus tömb a vermen van, és a veremnek sokkal korlátozottabb a mérete, mint a heapnek.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!