Schrift
[thread]8698[/thread]

Problem mit regex



<< >> 7 Einträge, 1 Seite
krusty
 2007-01-30 15:23
#73834 #73834
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

ich habe wieder mal ein Problem mit einem regulären Ausdruck.

Finde den fehler nicht:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
open(IN, "<$file") || die "Cannot open file $file!\n";
while(<IN>)
{
chomp;
if ( $_ =~ /^(.*)(Owner,No,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50)/ )
{
$_ = $2;
$gefunden = 1;
}
if ( $gefunden == 1 )
{
$_ = s/^,+//;
$_ = s/text\d+,//;
print $_."\n";
}
}
close(IN);


Die Datei enthält unter anderem folgende Zeilen:
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, > will ich mit $_ = s/^,+//; suchen und durch nichts ersetzen.
Dann gibt es viele Zeilen die folgendermaßen aufgebaut sind:
Text,text12345,text,text,text,,,,,,,,,,,,,,,,,,,,,,,,,,,,, > Hier will ich text12345 finden und durch nichts ersetzen. Siehe $_ = s/text\d+,//;. Jedoch funktioniert keines von beiden. Verstehe ich aber nicht. Muss dazu sagen, das es schon ein wenig her ist, seitdem ich Perl programmiert habe.
Habt ihr eine Idee/Vorschlag
krusty
 2007-01-30 15:36
#73835 #73835
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Okay, habe einen Fehler gefunden

Ich sollte es wohl lieber so schreiben. :( $line =~ s/^(\,+)//;

[edit] Jetzt werden die Zeilen mit ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
zwar nicht mehr angezeigt, jedoch bringt mir das script jede menge leere zeilen. Kann ich das filtern?\n\n

<!--EDIT|krusty|1170164439-->
Taulmarill
 2007-01-30 15:41
#73836 #73836
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
bei dem zweiten regex verhält es sich ähnlich. du musst textteile, die du einfangen willst, in klammern setzen und solltest auch dort das komma escapen. also z.b. so s/(text\d+)\,//
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
PerlProfi
 2007-01-30 18:00
#73837 #73837
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Quote
[edit] Jetzt werden die Zeilen mit ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
zwar nicht mehr angezeigt, jedoch bringt mir das script jede menge leere zeilen. Kann ich das filtern?

Du könntest noch prüfen ob die Zeile leer ist:
Code: (dl )
print $_, "\n" if $_ !~ /^\s*$/;

Vielleicht reicht auch if $_.

MfG PerlProfi
Dubu
 2007-01-30 23:22
#73838 #73838
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Taulmarill,30.01.2007, 14:41][...] und solltest auch dort das komma escapen. [...][/quote]
Wozu?
krusty
 2007-02-01 14:38
#73839 #73839
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Zunächst einmal möchte ich mich bei allen bedanken dir mir geholfen haben. Hat auch alles funktioniert.

Jetzt hat sich meine Datei geändert. Die Werte sind nicht mehr durch , getrennt sondern durch ;
Das sollte meiner Meinung nach kein problem sein. Jedoch greift meine Erkennung nicht mehr richtig.
Anbei die Suchanweisung
Code: (dl )
1
2
3
4
if ( $var =~ /(.*)(Owner)(.*)/ ) {
$gefunden=1;
print "debug\n".$1."\n".$2."\n".$3."\n";
}

Hatte auch schon versucht das matching so zu bauen, das die Zahlen alle hinter dem Owner angegeben sind, jedoch findet das Script dann überhaupt nix mehr. ???

Die Ausgabe sieht wie folgt aus:
Code: (dl )
1
2
3
debug

Owner;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;


Noch zur Info, vor dem Owner stehen willkürliche Zeichen, die ein Überrest vom decodieren sind. Bei dem File handelt es sich nämlich um einen Anhang einer Mail. Eingentlich sollte die Aufzählung noch bis 50 so weitergehen. Im File ist es jedenfalls so. Verstehe nicht, warum das matching auf einmal aufhört. Könntet ihr mir nochmal einen Tipp geben?
renee
 2007-02-02 10:12
#73840 #73840
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wie sieht Dein RegEx jetzt aus? Und kannst Du eine Beispielzeile mal posten?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 7 Einträge, 1 Seite



View all threads created 2007-01-30 15:23.