Also, jetzt bin ich wieder zuhause.
Gegeben sei eine kleine Textdatei datei.txt mit folgendem Inhalt:
AAAAAAA¡aaaaaaa¡aaa
BBBB¡bbbb¡bbb
CCCCCC¡cccc¡ccc
DDDDDDDD¡ddddd¡dddd
EEEEE¡eeeeeeeeee¡eee
FFFFFFFF¡fffff¡ff
GGGGGG¡ggggggggggggg¡ggg
HHHHH¡hhhhh¡h
und mit folgendem kleinen Skriptteil hatte ich vor die Zeile
mit den vielen EEE..s zu ändern:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl
use warnings; use strict; use diagnostics;
use Fcntl qw(:DEFAULT :flock SEEK_SET SEEK_CUR);
sub systell { sysseek($_[0], 0, SEEK_CUR) }
sysopen FH, "datei.txt", O_RDWR or die "Kann Datei nicht öffnen: $!\n";
flock FH, LOCK_EX or die "Kann Datei nicht sperren: $!\n";
my $pos = 0;
my ($feld1, $feld2, $feld3) = "";
while (<FH>) {
chomp;
($feld1, $feld2, $feld3) = split /\xA1/;
if ($feld1 eq "EEEEE") {
sysseek FH, $pos, SEEK_SET; # möchte aktuelle Zeile überschreiben
print FH "E-E-E¡eeeeeeeeee¡eee\n"; # geänderte Zeile
};
$pos = main::systell FH; # ich möchte den Zeilenanfang treffen
}
close FH;
Wieso schreibt mir das Skript die geänderte Zeile an die falsche Stelle?
Wo liegt der Fehler? Danke für jeden Tip. LG, Ralph