Schrift
[thread]7179[/thread]

regex mit variablen (für csv ähnliche daten)

Leser: 1


<< >> 4 Einträge, 1 Seite
Criamon
 2005-08-01 14:05
#56896 #56896
User since
2005-07-26
8 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich versuche mir hier eine RegEx zusammen zu basteln aber es funktioniert hinten und vorne nicht. Vielleicht hat ja jemand von Euch einen Tipp...

Ich habe die Variablen
$sTrennzeichen
sQuoteZeichen
$nSpalten

und

$sZeile

jetzt suche ich eine RegEx, die mit testet, ob in $sZeile wirklich $nSpalten vorkommen, d.h. $sTrennzeichen außerhalb von zwei sQuoteZeichen genau $nSpalten-1 mal vorkommt...

Wäre toll wenn mir jemand da helfen könnte, eigenltich muß das gleich (um 13:00) laufen :(

Schonmal Danke

Criamon

ps: Sowas wie
Code: (dl )
1
2
$sZeile =~ m/^(\\$sQuoteZeichen.*\\$sQuoteZeichen\\$sTrennzeichen
){$nSpaltenZahl-1}(\\$sQuoteZeichen.*\\$sQuoteZeichen)\$/


funktioniert leider nicht :(\n\n

<!--EDIT|Criamon|1122891318-->
Strat
 2005-08-01 14:29
#56897 #56897
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
d.h. du hast eine Zeile einer csv-Datei und willst herausfinden, wie viele spalten sie hat? Zum Parsen solcher Formate wuerde ich keinen RE, sondern ein Modul verwenden, z.B. Text::CSV_XS:
Code: (dl )
1
2
3
4
5
6
7
8
use Text::CSV_XS;

my $csv = Text::CSV_XS->new(
 { sep_char => $sTrennzeichen, quote_char => $sQuoteZeichen }
);
my $status = $csv->parse($sZeile);
my @spalten = $csv->fields();
print scalar(@spalten), " Spalten gefunden\n";

mehr verraet dir perldoc Text::CSV_XS\n\n

<!--EDIT|Strat|1122892194-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2005-08-01 15:49
#56898 #56898
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
interessanter Nick ^^
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
coax
 2005-08-01 16:52
#56899 #56899
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=Criamon,01.08.2005, 12:05]
Code: (dl )
m/ ... \\$sTrennzeichen){$nSpaltenZahl-1}(\\  ... $/ 
[/quote]

$nSpaltenZahl - 1   funktioniert so im RE nicht, du musst die Operation vorher auswerten, einer weiteren Variable zuweisen und diese dann im RE verwenden:
Code: (dl )
1
2
$nSpaltenZahlMinusEins = $nSpaltenZahl - 1;
m/^... \\\Q$sTrennzeichen\E){\Q$nSpaltenZahlMinusEins\E}(\\ ... $/

... oder du nutzt das erweiterte RE-Muster (??{ $nSpaltenZahl - 1}).
Wenn es dieser RE sein muss, wuerde ich zur ersten Variante greifen.

Und am besten du quotest die Variablen die du in den RE benutzt mit quotemeta() oder mit '\Q' und '\E'.
perldoc perlre

Grusz coax.
,,Das perlt aber heute wieder...'' -- Dittsche
<< >> 4 Einträge, 1 Seite



View all threads created 2005-08-01 14:05.