Az alábbi C++ problémám van. Hogyan lehet a legoptimálisabban megoldani?
Egy file-ból szeretnék adatokat beolvasni. Amiben lehetnek kommentek ill. komment sorok. Elég egyszerű probléma, de mégsem látom sehol, hogy optimálisan csinálnák. Nagy file-okról van szó, ezért ne írjátok légyszi, hogy ne törődjek az optimalizálással!
Ha a getline-al beolvasom a sort, majd ellenőrzöm mondjuk a kezdő karaktert, hogy komment jel-e, és utána olvasom az adatokat mondjuk sstream-mel, akkor lényegében kétszer olvastam be a sort!
Ha tudnám, hogy nem komment sor, akkor olvashatnám be egyből az adatokat >>, de sajnos ezt előre nem tudom.
Megoldható valahogy, hogy a sor kétszeri feldolgozása nélkül leprogramozzam?
getline-nal olvasol, azaz nem karakterenként
a formátum megoldása pedig valóban a te dolgod, ha mondjuk spacek választják el a számokat, akkor nem túl nehéz feldarabolni, és atoi-val integerré alakítani.
nekem továbbra is az a meglátásom, hogy azt se tudod pontosan megfogalmazni, hogy mi a probléma. először talán írd meg nem optimálisan, tedd föl, és utána beszélünk róla, hogy mit kéne optimalizálni. egyébként is igy szokták. üdv
Ha annyira irózol az újraolvasástól: mi lenne, ha karakterenként olvasnál, és írnál egy állapotautomatát a feldolgozásra? Ez meg fogja nyúzni a vinyót, hiszen karakterenként fog HDD-hez fordulni, és gépi ciklusok számát tekintve sem a leggyorsabb, viszont teljesíti az olvasás közbeni feldolgozás kritériumot, ha arra akarsz optimalizálni.
Szerintem a getline(), majd stringfeldolgozás a legjobb, mivel egyszer olvas a file ból (1 HDD művelet), kiszedi az entert, és utána karakterenkénti feldolgozást a memóriában csinálsz. Bármilyen más esetben meg kell lépned a getline-t, hiszen a komment sor után is kell entert keresni, hogy a file pointert a következő sorra állítsd.
Karakterenkénti feldolgozás helyett szavanként is megpróbálhatsz feldolgozni - gondolom programnyelvet szeretnél írni - akkor viszont kell egy függvény, ami szétszedi a puffert egy tömbbé, amit utána elemenként feldolgozol. Így 3x olvastál (1x HDD-ről, 2x RAMból), de kevesebb gépi ciklusból megvagy, mintha karakterenként dolgoznál fel.
Ha az adatok pl. egy leltár részei (vagy más, adatbázisszerű, ismétlődő típusú adatokból áll), és elvárható a pontos adatbevitel, akkor tudnám ajánlani a getline után az sscanf-et, mivel akkor már adattípusra pontosan ismered a sor tartalmát, és beolvasás közben feldolgozhatod, nem kell foglalkozni még a konverziókkal sem.
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!