Hell-O!
folgender Perl-Code hinterlässt beim Ausführen immer eine leere Zeile am Ende der Datei. Wie kann ich das verhindern?
Kennst du die Funktion chomp?
Der Code soll einen Eintrag mit einer bestimmten ID aus der Datei löschen. Liegt dieser Eintrag irgendwo in der Mitte der Datei, gibt es keine Probleme, wird hingegen der letzte Eintrag gelöscht, bleibt am Ende immer eine leere Zeile über, die beim späteren Wiedereinlesen der Daten Probleme macht.
Ein paar Hinweise zum Script seien mir gestattet:
use strict;
# für die Entwicklungsphase
use warnings;
my $id = $cgi->param('id');
Prüfe jede Eingabe auf ihre Gültigkeit (siehe perlsec)! Die Methode param()
unterscheidet nicht nach GET oder POST.
my @zeilen;
my @eintrag;
my $anzahl;
Letztere ist überflüssig.
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Praxisbedarf | Eintrag ändern</title>
Wenn du das CGI-Modul nutzt, warum dann nicht auch die Funktionen für die Ausgabe von HTML?
if(($id eq "")) {
print "<p>Bitte kontrollieren Sie Ihre Eingaben.</p>";
}
Das reicht als Prüfung nicht aus (s.o.).
open(DATEI,"</Users/powermac/Sites/Praxisbedarf/data/database.txt") || die "Fehler beim öffnen der Datenbank, Fehlercode 1 ";
@zeilen = <DATEI>;
close(DATEI);
Warum untersuchst du die Datei nicht gleich beim Einlesen:
open DATEI, $name or die "Error: $!";
my @neue_daten;
while(<DATEI>) {
next if ($_ =~ /$id/);
push @neue_daten, chomp($_);
}
close DATEI;
Dann kannst du @neue_daten wegschreiben.
print DATEI @zeilen;
Das letzte Element enthält vermutlich ein Newline am Ende, deshalb die neue Zeile.
Siechfred