Thread Sysopen in Kombination mit seek/sysseek und print (12 answers)
Opened by Gast at 2007-06-25 11:09

RalphFFM
 2007-06-25 20:19
#77793 #77793
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also, jetzt bin ich wieder zuhause.
Gegeben sei eine kleine Textdatei datei.txt mit folgendem Inhalt:
Code: (dl )
1
2
3
4
5
6
7
8
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:
Code: (dl )
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

View full thread Sysopen in Kombination mit seek/sysseek und print