Ik heb een Perl script geschreven dat een file parst.
Als het script een speciale tag tegen komt print ie iets als:
"tag X gevonden op regel Y"
Nou viel me op dat mijn regel nummers er enkele duizenden regels langs zat.
(het zijn vrij grote files)
Nadat ik de file geconverteerd had naar Windows line endings waren de regen nummers goed.
de regelnummers hou ik bij met een simpele counter en met een simpele while loop ik door de file heen.
Ik heb gevonden dat je heel de file ineens kan inlezen en dan kan gaan splitten, maar dat vind ik niet zo'n fijn idee gezien de files serieus groot kunnen zijn.
Ook kan je commandline opgeven wat voor soort line endings Perl moet gebruiken, maar ik vermoed dat deze files meerdere soorten (Windows en Linux) door elkaar bevatten.
Ook wil ik het in m'n script oplossen en de caller er niet mee vermoeien.
Hoe kan ik mijn script zowel Linux als Windows line endings laten accepteren?
Als het script een speciale tag tegen komt print ie iets als:
"tag X gevonden op regel Y"
Nou viel me op dat mijn regel nummers er enkele duizenden regels langs zat.
(het zijn vrij grote files)
Nadat ik de file geconverteerd had naar Windows line endings waren de regen nummers goed.
de regelnummers hou ik bij met een simpele counter en met een simpele while loop ik door de file heen.
code:
1
2
3
4
5
| open(MYINPUTFILE, 'c:\test.txt'); while(<MYINPUTFILE>) { #keep track of the line numbers $line_number ++; |
Ik heb gevonden dat je heel de file ineens kan inlezen en dan kan gaan splitten, maar dat vind ik niet zo'n fijn idee gezien de files serieus groot kunnen zijn.
Ook kan je commandline opgeven wat voor soort line endings Perl moet gebruiken, maar ik vermoed dat deze files meerdere soorten (Windows en Linux) door elkaar bevatten.
Ook wil ik het in m'n script oplossen en de caller er niet mee vermoeien.
Hoe kan ik mijn script zowel Linux als Windows line endings laten accepteren?
[ Voor 3% gewijzigd door liquid_ice op 13-07-2012 09:23 ]
Klus page: http://klusthuis.blogspot.com