Strings vom Array ausgeben
|
Seitenanfang |
Liebe Leute, unten steht mein Programm. Mit der jetzigen Version habe ich die Blöcke(ähnlich als Struktur und Information) in Arrays gespeichert,die mit den dazugehörigen Arrays ausgegeben werden.Wie löse ich aber meine Aufgabe, so dass ich nur die Blöcke mit dem String (d.h.String,das mich interessiert) "abc" oder "ABC" ausgeben kann ? Ich muß hinfügen,dass jedes Array hat 4-5 Zeilen und der gesuchte String befindet sich immer in der 2.oder 3.Zeile eines Blocks in der Mitte der Zeile.#!/usr/local/bin/perl use diagnostics; use strict; my $zeichen=0; my $count=0; open(FILE,"<datei.txt"); while(my $line = <FILE>) { chomp($line); if ($line=~m/\*/) { $zeichen = 1; $count = $count + 1; } elsif ($flag == 1) { push (my @array, $line); print "arr $count : @array\n"; } elsif ($line=~m/\*/) { $zeichen = 0; } close(FILE);
Datum: 06.12.2004-23:51

|
Genauer bitte :)
|
Seitenanfang |
Hallo! Kannst du mir dein Problem bitte genauer schildern? So event. in einer präzisen Schritt-für-Schritt - Anweisung was du machen möchtest? Einer dieser Blöcke als Beispiel wäre nicht schlecht. Hilfreich könnte für dich auch FileHandle.pm sein. Da gibt es dann u.a. die Methoden $fh->getline(); # eine Zeile und $fh->getlines(); # für alle Zeilen der Dateimfg pktm
Datum: 07.12.2004-15:06

|
re: Genauer bitte :)
|
Seitenanfang |
Hallo ! Hier sind die 2 Blöcke: ^ a oder:abc Pl:proof Fr a 01 abc Sa 02 abc ^ Eg Oder: PL:proofJeder Block fängt mit einem Caret(^) an. Das Problem ist,ich habe jeden Block in ein Array gespeichert und mit dem folgenden Code kann ich nur die Zeilen mit dem String "abc" ausgeben, aber nicht den gesamten Block wo diese Zeilen mit dem String "abc" vorkommen.Also aus 2 Blöcken brauche ich nur einen Block auszugeben. my @array =<FILE>; for (my $i=0;$i<@array;$i++) { print $array[$i] if ($array[$i]=~ /abc/); } } Ich habe hier nur 2 Blöcke als Beispiel gezeigt, aber es gibt in Wirklichkeit mehrere davon. Danke Dir für Deine frühere Antwort und eventuell für die nächste.
Datum: 09.12.2004-10:11

|
re: Genauer bitte :)
|
Seitenanfang |
| Nach mal langsam für so langsame Leute wie mich... Hast Du jeden Block in einem Element _eines_ Array oder hast Du wirklich für jeden Block ein _eigenes_ Array? Block in einem Element _eines_ Arrays: foreach(@array){ print $_ if($_ =~ /abc/); }_eigenes_ Array pro Block: print "@array" if(grep{/abc/}@array);ungetestet!
Datum: 09.12.2004-13:20

|
re: Genauer bitte :) - Zeit sparen ?
|
Seitenanfang |
Es geht um das eigene Array pro Block und leider bin ich nicht von der letzten Lösung viel weiter gekommen. Ich habe nur mittlerweile eine größere Datei mit dem Programm getestet und die Überraschung war,dass es ziemlich lange gedauert hat,bis die neue Datei mit den erwünschten Zeilen in eine andere geschrieben wurde. Vielleicht gibt es in dieser Hinsicht einen Trick,wie man das beschleunigen kann, um Zeit zu sparen und effizienter zu sein ?!
Datum: 10.12.2004-21:59

|