Thread Datei nach String durchsuchen und in Datei ausgeben (42 answers)
Opened by QWERTZ7 at 2011-03-22 10:49

FtR
 2011-03-22 12:52
#146766 #146766
User since
2003-08-20
39 articles
BenutzerIn
[default_avatar]
Nun hängt die Lösung sehr von der genauen Struktur deiner Datei ab.

Ich gehe mal von folgenden Annahmen aus:

- jeder Port-Block endet mit "\n\n"
- in einem Port-Block taucht das wort Port nicht auf
- die Datei ist nicht zu gross (kleiner 10MB)
- "Aktiv" kommt in den Port-Blöcken nur einmal vor
- Die Portnummer ist die erste Zahl innerhalb eines Port-Blockes

Dann kannst du folgendes versuchen.

- die Datei am Stück in eine Variable einlesen
- Die Datei in die Portblöcke trennen
- in den Portblöcken nach "aktiv" suchen
- Die erste Zahl rausfischen

=> fertig


Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
open (FH, <DATEINAME>);  # Datei öffen 
 
my $file; 
my @ports; 
my $port; 

{ 
local $/ = undef;     # den Zeilenendepattern löschen 
$file = <FH>;         # Datei am Stück lesen 
} 
 
# der Zeilenendepattern ist nun wieder hergestellt 

 
@ports = split ("Port", $file);  # Die Port-Blöcke trennen
 
foreach $port (@ports){ 
   if ($port=~m/Aktiv/){       # Nach "aktiv" suchen 
       $port =~m/(\d+?)/;    # Nach der 1. Zahl suchen 
       print $1 , "\n";              # ausgeben 

  }
}



FtR
Last edited: 2011-03-22 12:55:53 +0100 (CET)
Code: ()
1
2
print&f(($_=(3x3)."3+33")=~s=3(?![^3]|$)=&f=eg);
sub f{eval(@_?$_:"'$&+'x3");}

View full thread Datei nach String durchsuchen und in Datei ausgeben