Schrift
[thread]10226[/thread]

Lange Zeichenkette in einem Array suchen

Leser: 2


<< >> 5 Einträge, 1 Seite
Gast Gast
 2007-08-27 12:36
#98707 #98707
Hallo Zusammen,

ich möchte in einem Array nach einer Zeichenkette suchen. Das Array wird durch das Windows Prozess Programm pv.exe gefüllt. Anschließend soll geprüft werden ob ein bestimmter prozess aktiv ist.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
use strict;
use warnings;

my $prozesse = "D:/bin/pv.tmp";
system ('D:/bin/pv.exe -l java.exe > $prozesse');
open PROZESSE, "<$prozesse";
my @prozesse = <PROZESSE>;
close (PROZESSE);   

if ("@prozesse" =~ /perl.exe/)  {
  print "Der Prozess ist aktiv\n";
  print "@prozesse\n";
  }
else {
  print "Der Prozess ist nicht aktiv\n";
  }


Mein Problem ist jetzt die Zeile
Code (perl): (dl )
if ("@prozesse" =~ /perl.exe/)  {

Wenn ich statt nach "perl.exe" jetzt die folgende Zeichenkette suchen möchte

jre\bin\java -classpath .;.\lib\nls_charset12.jar;.\lib\ocrs12.jar;.\lib\classes12.jar;.\lib\Si
ebelJI.jar;.\lib\SiebelJI_Common.jar;.\lib\SiebelJI_deu.jar;.\lib\systray4j.jar;.\lib\activation.jar;.\lib\mail.jar;.\IV
Z\massload ivz.massload.Forms.MainForm -env "Wirk" -go "ML ASP Wirk;ML SST EVT Wirk;RE Wirk;RG Wirk;RV TS
AM Wirk;ML SA Wirk"


funktioniert diese ohne spezielle Maskierung nicht. Welche Metazeichen muss ich verwenden damit die Zeichenkette als solche erkannt wird.
DANKE
Gruß
Markus
sid burn
 2007-08-27 13:07
#98708 #98708
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Irgendwie stelle ich mir unter deinem Thread Titel etwas anderes vor, aber egal.

Wenn du eine String in einer Variable hast dann kannst du den befehl quotemeta() nutzen um alle Sonderzeichen zu escapen.

Möchtest du etwas direkt in einem String eingeben was gequotet werden soll kannst du \Q und \E nutzen. \Q Quotet alle Zeichen bis zum vorkommen von \E.

Code (perl): (dl )
1
2
quotemeta $variable;
$variable = "\QHallo, wie geht es dir?\E"


Letzteres kannst du genauso in einer Regex verwenden.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
murphy
 2007-08-28 01:06
#98739 #98739
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Wenn man einfach nur eine Zeichenkette in einer anderen suchen möchte, kann man statt eines regulären Ausdruckes auch die Funktion -f index verwenden -- da spart man sich das Escapen und es ist ein klein wenig schneller.

Anstatt die Ausgabe des Programmes pv erst in eine Datei zu schreiben, wäre es wahrscheinlich auch sinnvoller, sie ohne Umwege einzulesen, also etwa so:
Code (perl): (dl )
1
2
3
open PROZESSE, '-|', 'D:/bin/pv.exe', '-l', 'java.exe';
my @prozesse = <PROZESSE>;
close (PROZESSE);
When C++ is your hammer, every problem looks like your thumb.
Gast Gast
 2007-08-28 11:41
#98748 #98748
sid burn+2007-08-27 11:07:46--
Code (perl): (dl )
1
2
quotemeta $variable;
$variable = "\QHallo, wie geht es dir?\E"

Danke, klappt
Gruß
Markus
Gast Gast
 2007-08-28 11:43
#98749 #98749
murphy+2007-08-27 23:06:34--
Code (perl): (dl )
1
2
3
open PROZESSE, '-|', 'D:/bin/pv.exe', '-l', 'java.exe';
my @prozesse = <PROZESSE>;
close (PROZESSE);

Hallo murphy, auch für diesen Tipp vielen Dank, werde ich gleich umsetzen.
Gruß
Markus
<< >> 5 Einträge, 1 Seite



View all threads created 2007-08-27 12:36.