Schrift
[thread]7964[/thread]

regulärer ausdruck will nicht



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
shaihulud
 2006-05-10 14:18
#65918 #65918
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
  foreach (@Zeilen){
if (defined $dokuart && defined $zahl1){
print "test1";
if (/$dokuart\;$zahl1\;(\d+)/){
print "test2";
$zahl1 = $1;


die Zeilen sehen so aus:
B2DOK;63;41;1; 0 0 ;;;;0;0
B2DOK;62;40;1; 0 0 ;;;;0;0
B2DOK;19;19;1; 0 0 ;;;;0;0
etc....

Er gibt mir test1 aus aber komischerweise nie test2. Was stimmt an dem regulären ausdruck nicht???
Ich erkenne da einfach den Fehler nicht!...
AndreasM
 2006-05-10 14:35
#65919 #65919
User since
2005-10-08
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich habe nicht ganz verstanden worum es geht, aber versuch doch mal, im regulären Ausdruck das Escapen der Semikolons sein zulassen.

Grüße
AndreasM
shaihulud
 2006-05-10 15:07
#65920 #65920
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
ich will aus dateien die solche einträge haben:

B2DOK;63;41;1; 0 0 ;;;;0;0

den 3. eintrag bekommen. den 1. und 2. eintrag habe ich
(dokuart,zahl1)

wie gesagt leider tut er das nicht so..
shaihulud
 2006-05-10 15:17
#65921 #65921
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
oki ich hab den fehler. meine open etc funktion läuft nicht richtig:
Code: (dl )
1
2
3
4
#  my $dir = './Konfigurationsdaten/';
#  my @Zeilen = glob($dir.'*.DOCFIELD');
# open(my $fh,'<',$Zeilen[0]) or die $!;
#  close $fh;


dieser code soll mir im aktuellen unterverzeichnis "Konfigurationsdaten" die datei
"irgendwas.DOCFIELD" durchgehn.
("irgendwas" kenn ich nicht)
warum macht er das bei dem code nicht?\n\n

<!--EDIT|shaihulud|1147259959-->
bo
 2006-05-10 15:39
#65922 #65922
User since
2006-05-09
76 Artikel
BenutzerIn
[default_avatar]
versuch das mal...
Code: (dl )
my @Zeilen = glob($dir."\\*.DOCFIELD");
shaihulud
 2006-05-10 16:13
#65923 #65923
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
danke. probiers gleich mal


zwischenfrage:

kann mir jemand sagen wie ich variablen von einem unterprogramm an ein hauptprogramm übergeben kann?
bisher hab ich das einfach per referenz vom hauptprogramm ans unterprogramm gegeben und dort dann gefüllt.
Würd aber gern wissen ob es auch anders geht. würde gern ne Möglichkeit haben im unterprogramm variablen zu definieren und zu füllen, auf die ich im hauptprogramm zugreifen kann.

kann mir da jemand weiterhelfen?

P.S.: hab mal n Stichwort "var" gehört..
betterworld
 2006-05-10 16:26
#65924 #65924
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=shaihulud,10.05.2006, 14:13]kann mir jemand sagen wie ich variablen von einem unterprogramm an ein hauptprogramm übergeben kann?
bisher hab ich das einfach per referenz vom hauptprogramm ans unterprogramm gegeben und dort dann gefüllt.
Würd aber gern wissen ob es auch anders geht. würde gern ne Möglichkeit haben im unterprogramm variablen zu definieren und zu füllen, auf die ich im hauptprogramm zugreifen kann.

kann mir da jemand weiterhelfen?

P.S.: hab mal n Stichwort "var" gehört..[/quote]
"var" gibt es in Pascal, nicht in Perl. Etwas aehnliches kannst Du in Perl tun:
Code: (dl )
1
2
3
4
5
6
7
8
sub foo {
my ($a, undef, $b) = @_;
$_[1] = $a * $b;
}

my $c;
foo(7,$c,8);
print $c, "\n"; # 56

Das sieht nur etwas unschoen aus. Mit Prototypen kann man das so schreiben:
Code: (dl )
1
2
3
4
5
6
sub foo ($\$$) {
my ($a, $b, $c) = @_;
$$b = $a * $c;
}
foo(7,$b,8);
print $b, "\n";


Ich nehme an, dass du "return" schon kennst? Damit kannst Du eine beliebig lange Liste von Variablen oder/incl. eine Referenz auf z. B. einen Hash zurueckgeben. Ansonsten gibt es noch "globale Variablen", aber das ist schlecht und man sollte es nicht tun.\n\n

<!--EDIT|betterworld|1147264061-->
AndreasM
 2006-05-10 16:35
#65925 #65925
User since
2005-10-08
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Stehen diese Einträge "B2DOK;63;41;1; 0 0 ;;;;0;0" in einer beliebigen Zeile?
Ich glaube du bekommst immer nur die erste Zeile einer Datei eingelesen.


my $dir = './Konfigurationsdaten';
my @Zeilen = glob("$dir/*.DOCFIELD");

foreach (@Zeilen){
open(my $fh,"<$_") or die $!;
close $fh;
}
shaihulud
 2006-05-10 17:19
#65926 #65926
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
das mit den zeilen hat sich erledigt. funktioniert alles. bin nur nicht die zeilen richtig angegangen
shaihulud
 2006-05-10 17:27
#65927 #65927
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
[quote=betterworld,10.05.2006, 14:26]"var" gibt es in Pascal, nicht in Perl.  Etwas aehnliches kannst Du in Perl tun:
Code: (dl )
1
2
3
4
5
6
7
8
sub foo {
  my ($a, undef, $b) = @_;
  $_[1] = $a * $b;
}

my $c;
foo(7,$c,8);
print $c, "\n"; # 56

Das sieht nur etwas unschoen aus.  Mit Prototypen kann man das so schreiben:
Code: (dl )
1
2
3
4
5
6
sub foo ($\$$) {
  my ($a, $b, $c) = @_;
  $$b = $a * $c;
}
foo(7,$b,8);
print $b, "\n";


Ich nehme an, dass du "return" schon kennst?  Damit kannst Du eine beliebig lange Liste von Variablen oder/incl. eine Referenz auf z. B. einen Hash zurueckgeben.  Ansonsten gibt es noch "globale Variablen", aber das ist schlecht und man sollte es nicht tun.[/quote]
ja das mit refernzen kenn ich, aber ich hab so unglaublich viele daten aus unterprogs nötig in meinem hauptprogramm dass ich mit referenzen erstmal 20 deklarationen machen muss
Code: (dl )
1
2
3
4
5
my $a;
my $b;
my @c;
my %d;
etc...

so dass es unglaublich häßlich wirkt. Dachte es gäbe vielleicht ne bessere Lösung. weil ich ja dann auch immer im unterprogramm erstmal dereferenzieren muss
Code: (dl )
1
2
3
4
5
6
7
8
9
use lib....
use foo;
my $a = 5;
&foo($a);
--------
sub foo{
my $a =shift;
print ${$a};
}


aber wenn ihr meint dass es die beste Lösung ist dann mach ichs halt so
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2006-05-10 14:18.