Schrift
[thread]6051[/thread]

Inhalt nur ausgeben wenn ^ kein \n: -> RegEx Problem



<< |< 1 2 >| >> 14 Einträge, 2 Seiten
youngalcapone
 2004-01-31 18:58
#79686 #79686
User since
2003-08-14
185 Artikel
BenutzerIn
[default_avatar]
Aloha!
Ich habe längere Zeit nichts mehr richtiges mit Perl gemacht, jetzt aber wieder angefangen. Und schon hab ich wieder das erste Problem:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl
use strict;

open TXT, "../monatshit.txt" or die "$!";
my @txt = <TXT>;
close TXT;

if (@txt !~ /^\n/) {
print "Content-type: text/html\n\n";
print "<div class=\"monatshit\">";
print @txt;
print "</div>";
}


Dieses Script darf den Inhalt von monatshit.txt nur ausgeben,
wenn das erste Zeichen kein \n ist.
Nur leider funktioniert mein Regulärer Ausdruck nicht....
Ich hoffe ihr könnt mir helfen!
Gruss, Dave
esskar
 2004-01-31 19:03
#79687 #79687
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl
use strict;

open TXT, "../monatshit.txt" or die "$!";
my @txt = <TXT>;
close TXT;

unless($txt[0] =~ /^\r?\n/)
{
  print "Content-type: text/html\n\n";
  print "<div class=\"monatshit\">";
  print join "", @txt;
  print "</div>";
}
\n\n

<!--EDIT|esskar|1075568622-->
Crian
 2004-01-31 19:10
#79688 #79688
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Genau, Du kannst einen regulären Ausruck nicht so auf ein Array anwenden, nur auf einen Skalar.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
youngalcapone
 2004-01-31 19:31
#79689 #79689
User since
2003-08-14
185 Artikel
BenutzerIn
[default_avatar]
Danke für die schnellen Antworten!
Ich habe es jetzt so gemacht:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl
use strict;

open TXT, "../monatshit.txt" or die "$!";
my @txt = <TXT>;
close TXT;

if ($txt[0] !~ /^\n/) {
print "Content-type: text/html\n\n";
print "<div class=\"monatshit\">";
print @txt;
print "</div>";
}


Wo liegt der Nachteil gegenüber esskars Vorschlag (ich hab seinen Code nicht ganz verstanden)?
Gruss, Dave
eisbeer
 2004-01-31 20:01
#79690 #79690
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Anstatt esskars
Code: (dl )
unless($txt[0] =~ /^\r?\n/)


kannst du das schreiben:
Code: (dl )
if ($txt[0] !~ /^[\r\n]?\n/)


Was verstehtst du nicht ?
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
youngalcapone
 2004-01-31 20:33
#79691 #79691
User since
2003-08-14
185 Artikel
BenutzerIn
[default_avatar]
Hi eisbeer!
Ich weiss nicht (oder nicht mehr) was \r bedeutet...
und warum esskar ein join "" vor @txt gebaut hat versteh ich auch nicht ganz...
Den Rest kann ich noch irgendwie deuten!
Gruss, Dave
esskar
 2004-01-31 20:51
#79692 #79692
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
unter win taucht selten ein \n allein auf ...
ist ist meistens nachfolger von \r ... also ist abchecken, ob vor dem \n vielleicht doch noch ein \r relativ sinnvoll

print @array hängt an jedes element von @arry bei der ausgabe ein leerzeichen...
das wollte ich mit join verhindern
Dubu
 2004-01-31 22:11
#79693 #79693
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=esskar,31.01.2004, 19:51]unter win taucht selten ein \n allein auf ...
ist ist meistens nachfolger von \r ... also ist abchecken, ob vor dem \n vielleicht doch noch ein \r relativ sinnvoll
[/quote]
Das ist natuerlich nur dann so, wenn man eine DOS/Win-Datei unter Unix/Linux mit Perl bearbeitet.

Quote
print @array hängt an jedes element von @arry bei der ausgabe ein leerzeichen...
das wollte ich mit join verhindern

Da verwechselst du print @array mit print "@array".
So lange man die Variable $, nicht aendert, werden im ersten Fall die Elemente von @array direkt hintereinander ausgegeben.
esskar
 2004-01-31 22:19
#79694 #79694
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
okay... das mit dem array hatte ich verwechselt...
aber auch ein /^\n/ schlägt unter windows fehl, wenn vorne ben ein \r\n steht!
Crian
 2004-01-31 23:22
#79695 #79695
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Nein, unter Windows wird daraus intern CR LF, erst wenn man die Datei nach Linux überträgt ohne sie zu konvertieren, versteht das System dort unter \n nur LF, IIRC.\n\n

<!--EDIT|Crian|1075644886-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2004-01-31 18:58.