perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 17
Click for quality!




12.02.2012 / 03:34

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl/CGI: Scripts des Perl-Archiv zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragStrings 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

BeitragGenauer 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 Datei

mfg pktm

Datum: 07.12.2004-15:06

Beitragre: 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:proof

Jeder 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

Beitragre: 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

Beitragre: 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

-






-
-