Schrift
[thread]12797[/thread]

Regulaere Ausdruecke

Leser: 1


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Gast Gast
 2008-11-21 10:13
#116467 #116467
Hallo,

ich versuche grade einen Regulären Ausdruck zu erstellen.

Eingelesen wird eine Liste (Bsp):

Auto.VW.Golf.BJ
Auto2.VW.Polo.BJ
Auto3.Audi.A5.BJ
Auto4.Audi.A4.BJ
Auto5.Audi.A3.BJ
usw

Hier möchte ich nur bis zum ersten Punkt alles Haben also "NUR" AUTOX.

Mir fehlt heir leider die Idee wie ich alles bis zu diesem Punkt einlesen kann :(

Danke für eure Hilfe.
Crian
 2008-11-21 10:35
#116468 #116468
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Code: (dl )
/^([^.]+)\./


Oder du splittest die Strings nach dem Punkt und nimmst den ersten Eintrag.

Oder du arbeitest mit index und substr.
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
pq
 2008-11-21 10:50
#116470 #116470
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Crian, du darfst Gast-Postings auch freigeben, wenn du drauf antwortest =)
(ich weiss, man übersieht das hier sehr leicht...)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Linuxer
 2008-11-21 11:46
#116476 #116476
User since
2006-01-27
3882 Artikel
HausmeisterIn

user image
Ich würde ein split() mit LIMIT einsetzen und wie Crian bereits vorschlug, das erste Ergebnis verwenden.
Dabei ist zu beachten, dass der Punkt im Pattern eine Sonderbedeutung hat, also maskiert werden muss.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
havi
 2008-11-21 21:04
#116507 #116507
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Hier mal der Code mit split...

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl

use warnings;
use strict;

while(my $zeile = <DATA>) {

   my @array =  ();
   @array    = split(/\./, $zeile);

   print join("\n", $array[0])."\n";

} # while
__DATA__
Auto.VW.Golf.BJ
Auto2.VW.Polo.BJ
Auto3.Audi.A5.BJ
Auto4.Audi.A4.BJ
Auto5.Audi.A3.BJ


Gruss,
havi
Linuxer
 2008-11-21 22:37
#116511 #116511
User since
2006-01-27
3882 Artikel
HausmeisterIn

user image
hier mal der Code mit split() wie ich ihn meinte ;)
Wenn die Datenzeilen umfangreicher werden, kann LIMIT helfen, Zeit zu sparen.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl -l
use strict;
use warnings;

while my ( $line = <DATA> ) {
  my $field1 = ( split /\./, $line, 2 )[0];
  print $field1;
}

__DATA__
Auto.VW.Golf.BJ
Auto2.VW.Polo.BJ
Auto3.Audi.A5.BJ
Auto4.Audi.A4.BJ
Auto5.Audi.A3.BJ
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
topeg
 2008-11-21 22:58
#116514 #116514
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
havi+2008-11-21 20:04:27--
Code (perl): (dl )
print join("\n", $array[0])."\n";

Ist das nicht völlig sinnlos?

Code (perl): (dl )
print $array[0]."\n";

das reicht doch völlig.
havi
 2008-11-21 23:09
#116515 #116515
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
topeg+2008-11-21 21:58:08--
havi+2008-11-21 20:04:27--
Code (perl): (dl )
print join("\n", $array[0])."\n";

Ist das nicht völlig sinnlos?

Code (perl): (dl )
print $array[0]."\n";

das reicht doch völlig.


Richtig, aber wenn man dann evtl. doch mehr will, zeigt mein Loesungsansatz es gleich in meinem Bsp...

eben

Code: (dl )
print join("\n", $array[0], $array[2]."\n"; # zB


wie auch immer...
Gast Gast
 2009-01-15 12:47
#118015 #118015
wenn das ganze jetzt so aussehen würde:

Auto VW Golf BJ
Auto2 VW Polo BJ
Auto3 Audi A5 BJ

wie kann die jeweiligen werte einzelnd rausnehmen ?

so das ich dann schreiben kann (csv export):

Code: (dl )
print OUTFILE "$1;$2;$3;$4\n";


Ich bin leider Anfänger deswegen wäre mir lieb wenn das ganze in Crains art und weiße geschrieben ist den das kann ich gut nachvollziehen :)

Mfg,
Jakal
Linuxer
 2009-01-15 13:54
#118018 #118018
User since
2006-01-27
3882 Artikel
HausmeisterIn

user image
splitte am Leerzeichen (diesmal ohne LIMIT) und weise das Ergebnis einem Array zu.

Zum Ausgeben kannst Du dann die Elemente des Array mithilfe von join() verbinden.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
# ...
# zeilenweises lesen

chomp $line;
my @elements = split / /, $line;

# verarbeite @elements

print OUTFILE join ';', @elements;

# ...
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2008-11-21 10:13.