Ich mache eine große (8000 Zeilen) Bibliothek Datenkonvertierung. Ich lese eine Datei ein und möchte sie zeilenweise ändern. Das Lesen der Datei wird beendet, bevor das Ende der Datei erreicht wird.Mein Skript vermisst Zeilen beim Lesen einer Datei
open(my $infh, "<", 'infile.pica')
|| die('Could not open pica file');
open(my $outfh, ">", 'infile.pica.norm')
|| die('Could not open pica file');
my $counter = 0;
while (my $line = <$infh>) {
$counter++;
# for debugging - this is the last line being read.
# infile actually has 7857 lines
if ($counter >= 7691) {
say $line;
}
# modification commented out for debugging
print $outfh $line;
}
close $infh;
close $outfh;
Mein erster Gedanke war, dass es ein seltsames Zeichen in dieser Linie ist, aber es gibt nichts
006X $cEBC$03564211 (original)
006X $cEBC$035642 (being read, thats what the say prints)
Hier ein Ausschnitt des Datensatzes ist, wo es aufhört zu lesen:
[email protected] $0Oax
002C $aText$btxt
002D $aComputermedien$bc
002E $aOnline-Ressource$bcr
004A $09780309160193
006X $cEBC$03564211
[email protected] $aeng
[email protected] $a2010
Sie können sehen, dass jeder Zeile ein Zeilenumbruch folgt (Hey Code 0A
). In der Zeile 006X hört es auf zu lesen.
Ihr Code sieht in Ordnung aus, vielleicht posten Sie weitere Details Ihrer Einrichtung? –
Haben Sie sich die letzten Zeichen in den Zeilen angesehen? Per Voreinstellung teilt Perl Zeilen auf einem Zeilenumbruchzeichen ('\ n') auf - haben alle Ihre Zeilen eines? – reinierpost
Sie können die Datei in etwas wie notepad ++ öffnen, lassen Sie es alle Zeichen anzeigen (wie CR, LF etc ..) und schauen Sie die verdächtige Linie, dort kann tatsächlich etwas sein, dass Sie nicht "sehen" – Nullman