Lineseperator Problem
Karle
- perl
Hi,
ich komme mal wieder nicht weiter ...
open (X, "$SSH $CMD 2>/dev/null |") or die "Can't run program: $!\n";
while (my $section = <X>)
{
print "BEGIN $section END\n";
}
Ausschnitt:
BEGIN Ausgabe 1
END
BEGIN Ausgabe 2
END
BEGIN Ausgabe 3
END
BEGIN
END
BEGIN Ausgabe 1
END
BEGIN Ausgabe 2
END
BEGIN Ausgabe 3
END
BEGIN
END
Soweit so gut. Nun möchte ich aber innerhalb einer "Sektion" parsen, deshalb setze ich den lineseperator neu:
open (X, "$SSH $CMD 2>/dev/null |") or die "Can't run program: $!\n";
my $oldlinesep = $/;
my $newlinesep = "\n\n";
$/ = $newlinesep;
while (my $section = <X>)
{
print "BEGIN $section END\n";
}
Ergebnis:
BEGIN Ausgabe 1
Ausgabe 2
Ausgabe 3
Ausgabe 1
Ausgabe 2
Ausgabe 3 END
Das ist nicht so gut, da ich ja gerne folgendes Ergebnis hätte:
BEGIN Ausgabe 1
Ausgabe 2
Ausgabe 3 END
BEGIN Ausgabe 1
Ausgabe 2
Ausgabe 3 END
Hat jemand eine Idee, wo mein Fehler liegt?
Danke.
Karle
Hat jemand eine Idee, wo mein Fehler liegt?
#!/usr/bin/perl -w
use strict;
local $/ = "\n\n";
while(<DATA>) {
chomp;
print "BEGIN $_ END\n";
}
__DATA__
Ausgabe 1
Ausgabe 2
Ausgabe 3
Ausgabe 1
Ausgabe 2
Ausgabe 3
Ausgabe 1
Ausgabe 2
Ausgabe 3
Struppi.
»» Hat jemand eine Idee, wo mein Fehler liegt?
#!/usr/bin/perl -w
use strict;local $/ = "\n\n";
while(<DATA>) {
chomp;
print "BEGIN $_ END\n";
}
Ist immernoch folgendes Ergebnis:
[code lang=perl]Ergebnis:
BEGIN Ausgabe 1
Ausgabe 2
Ausgabe 3
Ausgabe 1
Ausgabe 2
Ausgabe 3 END
Ist die Leerzeile vielleicht gar kein \n? Kann man die Steuerzeichen irgendwie ausgeben? Mein OS ist Solaris.
Gruss
Karle
Ist immernoch folgendes Ergebnis:
Bei mir nicht.
BEGIN Ausgabe 1
Ausgabe 2
Ausgabe 3 END
BEGIN Ausgabe 1
Ausgabe 2
Ausgabe 3 END
BEGIN Ausgabe 1
Ausgabe 2
Ausgabe 3 END
Ist die Leerzeile vielleicht gar kein \n? Kann man die Steuerzeichen irgendwie ausgeben? Mein OS ist Solaris.
Kann ich dir nicht sagen, da ich das nicht weiß.
Struppi.
Hi,
BEGIN Ausgabe 1
Ausgabe 2
Ausgabe 3Ausgabe 1
Ausgabe 2
Ausgabe 3 ENDDas ist nicht so gut, da ich ja gerne folgendes Ergebnis hätte:
Kann es sein, daß die Leerzeile zwischen Ausgabe 3 und Ausgabe 1 gar nicht leer ist, sondern vielleicht Leerzeichen/Tabs/sonstigen Whitespace enthält?
cu,
Andreas
Kann es sein, daß die Leerzeile zwischen Ausgabe 3 und Ausgabe 1 gar nicht leer ist, sondern vielleicht Leerzeichen/Tabs/sonstigen Whitespace enthält?
Ja, ist möglich und bin grad am überlegen, wie das rausfinden kann ...
Hi,
»» Kann es sein, daß die Leerzeile zwischen Ausgabe 3 und Ausgabe 1 gar nicht leer ist, sondern vielleicht Leerzeichen/Tabs/sonstigen Whitespace enthält?
Ja, ist möglich und bin grad am überlegen, wie das rausfinden kann ...
Schau Dir die Ausgabe mit einem Hex-Editor an.
cu,
Andreas
Hi,
»» »» Kann es sein, daß die Leerzeile zwischen Ausgabe 3 und Ausgabe 1 gar nicht leer ist, sondern vielleicht Leerzeichen/Tabs/sonstigen Whitespace enthält?
»»
»» Ja, ist möglich und bin grad am überlegen, wie das rausfinden kann ...Schau Dir die Ausgabe mit einem Hex-Editor an.
open (X, "$SSH $CMD 2>/dev/null |") or die "Can't run program: $!\n";
while (my $section = <X>)
{
if ($section =~ /^\s+\n$/) {print "YEAH";} else{print "BLOED"};
print "BEGIN${section$END\n";
}
Ausschnitt:
BLOEDBEGIN Ausgabe 1
END
BLOEDBEGIN Ausgabe 2
END
BEGIN Ausgabe 3
END
YEAHBEGIN
END
BLOEDBEGIN Ausgabe 1
END
BLOEDBEGIN Ausgabe 2
END
BLOEDBEGIN Ausgabe 3
END
YEAHBEGIN
END
Wenn ich das richtig deute, dann sind da tatsächlich irgendwelche Leerzeichen drin - verdammt!
hi,
also ich hab das jetzt so gelöst um die Leerzeichen rauszubekommen (was auch klappt) ...
while (my $section = <X>)
{
if ($section =~ /^\s+\n$/) {$section =~ s/ //g;push @tmparray,$section);}
else {push (@tmparray,$section);}
}
Aber wie kann ich nun mein lineseparator gegen ein Array anwenden? Sowas geht nicht, soweit ich weiss. Muss ich die Daten jetzt extra in ein (temp)file schreiben um wieder ein Filehandle zu bekommen?
Gruss Karle