nerviger zeilenumbruch
piet
- perl
0 Torwächter0 piet0 Torwächter0 Torwächter0 piet
0 Marko0 Matti Maekitalo0 Matti Maekitalo0 piet
hallo auch!
folgendes perl-script (ausschnitt) ist nicht davon abzuhalten, im fehlerfall (hier: leeres feld aus html-form) einen nervigen zeilenumbruch zu prduzieren.
ansonsten funktioniert alles bestens- fehlermeldungen gibt's auch keine, nur...
#leere felder prüfen:
my ($check);
$check= new CGI;
sub eintragen
{
#eintrag vorbereiten
$date=localtime();
$betreff=param('betreff');
$name=param('name');
$nachricht=param('nachricht');
$mail=param('mail');
$nachricht=~ s/(?:\015\012?|\012)/<br>/g;
$eintrag="$betreff\t $name\t $date\t $mail\t $nachricht\n";
if ($check->param('name') eq '' || param('mail') eq '' || param('betreff') eq '' || param('nachricht') eq '')
{
chomp ($eintrag);
}
#eintragen
open (IN, ">>test.txt") || die ("Technisches Problem: $!\n");
print IN "$eintrag";
close IN;
}
ich dachte das prob eigentlich mit dem chomp vertilgt zu haben- irrtum.
kann wer von euch den fehler erkennen?
beste grüße
piet
Hallo;
mit:
$derzeilentext =~ s/\n//g;
wird der Zeilenumbruch entfernt.
Greetings
Torwächter
hallo herr "wachtmeister" ;-)
leider will auch das nicht richtig hinhauen (obwohl's so schön einfach war)
bzw.- vielleicht hab ich's auch falsch gehandlet:
if ($check->param('name') eq '' || param('mail') eq '' || param('betreff') eq '' || param('nachricht') eq '')
{
$eintrag=~ s/\n//g;
}
trotzdem big up für die rekordgeschwindigkeit!
greetings
bernd
Hmm,
dann versuchs mal hiermit:
$eintrag =~ s/[\n\r]//g;
oder hiermit:
$eintrag =~ s/\015\012|\012|\015//g;
Greetings
Torwächter
Hallo,
Du sagst ein Zeilenumbruch.
Meinst du einen HTML (<br>) oder einen solc
hen (im Text)?
Wenn im HTML dann ist diese Zeile dein Fehler:
$nachricht=~ s/(?:\015\012?|\012)/<br>/g;
Ansonsten versuchs mit der CodeZeile aus meinem 2ten Posting.
Greetings
Torwächter
hi wächter,
klappt beides nicht...
thx anyway
piet
Hej,
kommt die If-Bedingung jemals vor?
Marko
if ($check->param('name') eq '' || param('mail') eq '' || param('betreff') eq '' || param('nachricht') eq '')
use Mosche;
folgendes perl-script (ausschnitt) ist nicht davon abzuhalten, im fehlerfall (hier: leeres feld aus html-form) einen nervigen zeilenumbruch zu prduzieren.
Ich habe jetzt ein bisschen über dein Script drübergeguckt - und habe einiges gefunden, was man verbessern kann
#leere felder prüfen:
my ($check);
$check= new CGI;
my $check = new CGI; # ist als einzeiler schöner, oder?
sub eintragen
{
#eintrag vorbereiten
$date=localtime();
$betreff=param('betreff');
$name=param('name');
$nachricht=param('nachricht');
$mail=param('mail');
Warum benutzt du oben das CGI Modul über den OOP-Ansatz und hier direkt?
$nachricht=~ s/(?:\015\012?|\012)/<br>/g;
$eintrag="$betreff\t $name\t $date\t $mail\t $nachricht\n";
if ($check->param('name') eq '' || param('mail') eq '' || param('betreff') eq '' || param('nachricht') eq '')
Frag das ganze doch vorher ab, und setze darauf hin $eintrag.
Alleine durch das ">>" beim öffnen der Datei wird der Zeilenumbruch erzeugt. Du kannst das ganze umgehe, indem du dein Script anders aufbaust:
my $c = new CGI;
if ($c->param('name') && $c->param('mail') && $c->param('betreff') && $c->param('nachricht')) {
# Fehlermeldung ausgeben
print "<h1>Irgendwas nicht angegeben</h1>";
} else {
my $date = localtime();
# alle Eintraäge vorhanden
my $nachricht = $c->param('nachricht');
$nachricht=~ s/(?:\015\012?|\012)/<br>/g;
# da du \t ale Begrenzerzeichen benutzt,
# solltest du auch die \t hier escapen
$nachricht =~ s/\t/\t/g;
open (FH, ">>dein_file") or die "Fehler: $!";
print FH $c->param('betreff'), "\t", $c->param('name'),
"\t$date\t," $cparam('mail'), "\t", $c->param('nachricht'),
"\n";
close(FH);
}
So sollte es besser funktionieren...
use Tschoe qw(Matti);
use Mosche;
if ($c->param('name') && $c->param('mail') && $c->param('betreff') && $c->param('nachricht')) {
...und statt if sollte hier besser unless stehen, wenn bei wahrer Abfrage die Fehlermeldung kommt...
use Tschoe qw(Matti);
hi matti,
erstmal besten dank für die anregungen zum code.
eins ist mir bei deinem ansatz nicht ganz klar:
warum wird durch dieses konstrukt
print FH $c->param('betreff'), "\t", $c->param('name'),
"\t$date\t," $cparam('mail'), "\t", $c->param('nachricht'),
"\n";
close(FH);
das hier vermieden?
Alleine durch das ">>" beim öffnen der Datei wird der Zeilenumbruch erzeugt. Du kannst das ganze umgehe, indem du dein Script anders aufbaust:
ansonsten scheint imho genau das der kern zu sein:
solltest du auch die \t hier escapen
$nachricht =~ s/\t/\t/g;
wenn ich das auf meinen $eintrag anwende, tut sich allerdings nichts (fehler gibt es aber auch keinen).
immerhin ist das ziel jetzt viel klarer:
entferne alle \t+\n und das ">>" (wie letzteres funktionieren soll, weiss ich nicht)
hast du evtl. noch eine idee?
greetings
piet