Ik ben momenteel bezig met het uitlezen van een bestand, in C++.
Ik gebruik fstream voor het lezen c.q. schrijven van m'n data.
Nu is het zo dat er in het bestand afwisselend van newline characters gewisseld wordt.
b.v. regels 1 t/m 10 zijn Windows newlines (\x0D \x0A), regel 11 is een unix newline (\x0A) en regel 12 t/m 14 zijn Mac newlines (\x0D) de rest zijn bijvoorbeeld
weer Windows newlines.
(dit varieert per bestand en per regel)
Ik zie veel oplossingen als (pseudo)
maar daar heb ik niets aan omdat deze door elkaar gebruikt worden.
Uitlezen en controleren op '\x0D' | '\0x0A' werkt niet want daardoor krijg ik I/O fouten.
Uitlezen en controleren op iedere voorkomende newline is wellicht een optie, maar
doordat je de file (offset) pointer continue moet verplaatsen kost dit performance.
Hoe kan ik op een slimme manier ervoor zorgen dat alle soorten newlines op een correcte manier gelezen en verwerkt worden?
Ik gebruik fstream voor het lezen c.q. schrijven van m'n data.
Nu is het zo dat er in het bestand afwisselend van newline characters gewisseld wordt.
b.v. regels 1 t/m 10 zijn Windows newlines (\x0D \x0A), regel 11 is een unix newline (\x0A) en regel 12 t/m 14 zijn Mac newlines (\x0D) de rest zijn bijvoorbeeld
weer Windows newlines.
(dit varieert per bestand en per regel)
Ik zie veel oplossingen als (pseudo)
C:
1
2
3
4
5
| #ifdef WIN32 #NEWLINE \x0D\x0A #ifdef UNIX #NEWLINE \x0A #endif |
maar daar heb ik niets aan omdat deze door elkaar gebruikt worden.
Uitlezen en controleren op '\x0D' | '\0x0A' werkt niet want daardoor krijg ik I/O fouten.
Uitlezen en controleren op iedere voorkomende newline is wellicht een optie, maar
doordat je de file (offset) pointer continue moet verplaatsen kost dit performance.
Hoe kan ik op een slimme manier ervoor zorgen dat alle soorten newlines op een correcte manier gelezen en verwerkt worden?