Guten Morgen,
Seit gestern sitze ich bei einem Problem, daß mir nicht ganz klar ist.
Ich versuche die ganze Zeit einen String an einer gewissen Stelle zu zerlegen, und einen anderen dort einzufügen. So weit so gut, aber er fügt nun mal nicht dort ein wo ich will, sondern irgendwo.
Hier ist mal der Code, der dies macht.
sub savereply {
my ($posting,$replynumber,$topic,$text,$name,$email,$hpaddress,$icq) = @_;
my $in = '';
my (@replies, $newreply, $top, $unixzeile) = ((),'','','');
my $file = $posting.'.txt';
my $unixzeit = time;
if ($email eq '') {
$email = '----';
}
if ($icq eq '') {
$icq = '----';
}
if ($hpaddress eq '') {
$hpaddress = '----';
}
open(FILE,"messages/$file") or die "Cant save file : $!\n";
while (<FILE>) {
$in .= $_;
}
close FILE;
if ($in =~ /(<top>.+?</top>)/s) {
$top = $1;
}
if ($in =~ /(<unix>.+?</unix>)/s) {
$unixzeile = $1;
}
while ($in =~ /(<reply>.+?</reply>)/sg) {
push @replies, $1;
}
$newreply = join("\n","<reply>",
"<unix>$unixzeit</unix>",
"<ip>$ip</ip>",
"<zeit>$zeit</zeit>",
"<topic>$topic</topic>",
"<name>$name</name>",
"<email>$email</email>",
"<icq>$icq</icq>",
"<hpadresse>$hpaddress</hpadresse>",
"<text>$text</text>",
"</reply>\n");
splice(@replies, $replynumber, 0, $newreply);
open(DB,">messages/$file") or die "Cant save file : $!\n";
flock DB, 2;
print DB "$unixzeile\n";
print DB "$top\n";
print DB "@replies\n";
close DB;
print $query->redirect("$url");
}
Wie das einzulesende/zu speichernde File aussieht kann man hier sehen:
http://212.17.119.105/forum2/messages/1021792753.txt
Wie gesagt, er fügt es irgendwo ein, nicht an der Stelle "$replynumber". Ich habe mir $replynumber zur Probe ausgeben lassen, und es ist immer richtig, also kann es mal daran nicht liegen.
Wenn ich zur Probe mal :
print "Content-type:text/plain\n\n";
foreach my $rep (@replies) {
print "$rep\n";
print 'x' x 100 ."\n";
}
schreibe, zeigt er mir zuerst 3 Balken mit 100 x 'x' an, dann erst alle "<reply>", oder 2 Balken mit x dann wieder <reply> dann wieder 2 Balken mit x. Was hat das zu bedeuten, und wie mache ich es, daß es richtig funktioniert ?