Datei bzw. Array Ausgabe bei RegExp Match
klaus
- perl
Hi,
ich hab ein File (welches im array @file ist), welches wie folgt aussieht:
asadf
asdfas sd
asdfsf
ID
1
2
3
adsf a
sad
f
asdf
sadf
ID
2
34
6
sadfasd
asdf
usw.
Nun will ich alles was nach der ID kommt bis zur Leerzeile ausgeben.
Ich weiss nun nicht, wie man das am besten anstellt. Vielleicht irgendwie die Arrayelemente "shiften"? Kein Plan.
Mein Miniansatz bislang ...
foreach my $i (@file)
{
if ($i =~ /ID/) { ??? }
}
Tipps?
Danke.
MfG,
Klaus
Hi,
ID
1
2
3
Nun will ich alles was nach der ID kommt bis zur Leerzeile ausgeben.
Wenn die Anzahl der Folgezeilen immer gleich ist könntest Du mit "$.", der Zeilennummer arbeiten. Wenn da nur Zahlen stehen, wirds evntl. noch einfacher.
Hotte
Hi,
Hi,
ID
1
2
3Nun will ich alles was nach der ID kommt bis zur Leerzeile ausgeben.
Wenn die Anzahl der Folgezeilen immer gleich ist könntest Du mit "$.", der Zeilennummer arbeiten. Wenn da nur Zahlen stehen, wirds evntl. noch einfacher.
Hotte
leider sind es keine Zahlen und die Anzahl der Zeilen ist auch variabel.
ciao,
Klaus
Hi,
ich hab ein File (welches im array @file ist),
Wrong Approach, weil du an dieser Stelle bereits Information vernichtet hast.
Womöglich hast du auch ein katastrophales Fileformat.
welches wie folgt aussieht:
asadf
asdfas sd
asdfsf
ID
1
2
3adsf a
Und wie sieht das Rohfile aus?
mfg Beat;
Hi,
Und wie sieht das Rohfile aus?
genau so wie im ersten Post.
Ich hab nur ein my @file = <READ>; gemacht.
ciao,
Klaus
Und wie sieht das Rohfile aus?
genau so wie im ersten Post.
Ich hab nur ein my @file = <READ>; gemacht.
Wenn du den Handle-Zeilen-Separator auf \n\n setzt:
my $oldlinesep = $;
$\ = "\n\n";
Dann kannst du
while(<FILE>){
$_ =~m/$some_pattern/ and do_something();
}
verwenden.
Denke daran, den Handle-Zeilen-Separator wieder zurückzusetzen.
$\ = $oldlinesep;
Kopieren eines Files in einen Array ist fast immer schlecht.
mfg Beat
Und wie sieht das Rohfile aus?
genau so wie im ersten Post.
Ich hab nur ein my @file = <READ>; gemacht.Wenn du den Handle-Zeilen-Separator auf \n\n setzt:
my $oldlinesep = $;
$\ = "\n\n";
Korrektur.
Der Input-Line-Separator für das Handle ist $/ .
mfg Beat
Korrektur.
Der Input-Line-Separator für das Handle ist $/ .
Und das korrekte Vorgehen wäre local $/ = "\n\n";
:)
Siechfred
Hi,
$\ = "\n\n";
Dann kannst du
while(<FILE>){
$_ =~m/$some_pattern/ and do_something();
}
ich hab noch nicht ganz verstanden was $/ macht bzw. wie ich das dann in der Funktion für meine Zwecke umsetzen kann? Kannst mir noch etwas mehr helfen?
ciao,
Klaus
$\ = "\n\n";
Dann kannst du
while(<FILE>){
$_ =~m/$some_pattern/ and do_something();
}ich hab noch nicht ganz verstanden was $/ macht bzw. wie ich das dann in der Funktion für meine Zwecke umsetzen kann? Kannst mir noch etwas mehr helfen?
Ein <FILEHANDLE> operiert im Scalarkontext oder im Listenkontext. Aber woran erkennt denn das Programm, wie es im Listenkontext eine "Zeile" abzutrennen hat? Per Default anhand von "\n".
Da bei dir aber ein Record durch "\n\n" abgeschlossen wird, wäre dies ein geeigneter Separator für $/ .
mfg Beat
Moin
Hallo Klaus, nur so als Gedankenanstoß: Kann es sein das dir hiernbei ein mehrdimensionales Array besser passen würde? Ein leerer Datensatz im Array als Trenner? Das scheint mir doch wohl nicht der richtige Weg zu sein.
als Beispiel: um diene Werte zu nehmen:
$array=array(0=>array('werte'=>array(0=>'asadf',
1=>'asdfas sd',
2=>'asdfsf'),
'ID'=>array(0=>1,
1=>2,
2=>3)
),
1=>array('werte'=>array(0=>'adsf a',
1=>'sad',
2=>'f',
3=>'asdf',
4=>'sadf'),
'ID'=>array(0=>2,
1=>34,
2=>6)
)
)
Denk mal drüber nach.
Gruß Bobby
Moin
Ups, falsche Scriptsprache. Sollte für Perl aber auch gelten auch wenn die Schreibweise sicher andres ist. Das kann ich nicht beurteilen, da ich in Perl nicht bewandert bin.
Mal drüber informieren.
Also nochmal sorry.
Gruß Bobby