Schrift
[thread]7969[/thread]

Kniffliger programmschnipsel

Leser: 2


<< >> 8 Einträge, 1 Seite
shaihulud
 2006-05-11 17:51
#65971 #65971
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
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
#!/usr/bin/perl

open(DATEI, "<./Konfigurationsdaten/20060310.DOCFIELD") || die "Fehler beim öffnen von Datei $datei - $!";
my @Zeilen = <DATEI>;
close(DATEI);
my %hash2;
my $old_doc;
my %hash;


 foreach (@Zeilen){
     if (/(\w+)\;(\d+)\;(\d+)/){
       $dokuart =  $1;
       $zahl1 =  $2;
       $zahl2 =  $3;
       if(!defined $old_doc){
         $old_doc = $dokuart;
       }
       if($dokuart!=$old_doc){
       $hash2{$old_doc}=\%hash;        
       %hash;                 #<---vielleicht liegt hier das problem
       }
       open(DATEI, "<./Konfigurationsdaten/20060310.REPOSITORY") || die "Fehler beim öffnen von Datei $datei - $!";
       my @Zeilen2 = <DATEI>;
       close(DATEI);
       foreach(@Zeilen2){
         if(/^$zahl2;(^[;]+)/){
           $hash{$zahl1}=$1;                                
         }
       }        
     }
     $old_doc = $dokuart;
 }
 
 
 foreach my $ele ( keys(%hash2)){
   print "$ele\n";
   foreach my $ele2 (keys %{ $hash2{$ele} }){
     print "$ele2\n";
     print "$hash2{$ele}{$ele2}\n";
  }
 }


Datei Konfigurationsdaten/20060310.DOCFIELD sieht so aus:
DOK01;1;1;1;  0 0     ;;;;0;0
DOK01;8;8;1;  0 0     ;;;;0;0
DOK01;63;77;1;  0 0     ;;;;0;0
REO;53;47;1;  0 0     ;;;;0;0
REO;23;24;1;  0 0     ;;;;0;0
SAPDL;24;25;1;  0 0     ;;;;0;0
SAPDL;25;26;1;  0 0     ;;;;0;0
SAPDL;13;62;1;  0 0     ;;;;0;0
etc.....

Datei Konfigurationsdaten/20060310.REPOSITORY sieht so aus:
23;Patient-ID neu;Patient-ID neu;22;0;-1;;;;CHAR;35;0;0;;
24;Dateiname;Dateiname;23;0;-1;;;;CHAR;35;0;0;;
25;Drucklisten-Art;Drucklisten-Art;24;0;-1;;;;CHAR;4;0;0;;
26;Mandant;Mandant;25;0;-1;;;;CHAR;3;0;0;;
27;Report;Report;26;0;-1;;;;CHAR;35;0;0;;
28;Reportname;Reportname;27;0;-1;;;;CHAR;35;0;0;;
etc....

Möchte einen Hash2 haben in dem hash immer unter dokuart gespeichert wird, aber meine ausgabe ist nur :
59
49
DAREG

Die Ausgabe ist somit auch nicht richtig, da die ausgabe eigentlich eine zahl und zwei einträge haben muesste (zb "REO" "23" "Dateiname")

D.h. irgendwo stimmt mein Code nicht, aber ich finde keinen Fehler...
latein am ende...\n\n

<!--EDIT|shaihulud|1147358345-->
cm
 2006-05-11 19:21
#65972 #65972
User since
2006-04-27
25 Artikel
BenutzerIn
[default_avatar]
Hi,

zum einen matched deine Abfrage
Code: (dl )
 $dokuart != $old_docu

nicht.
Code: (dl )
 $dokuart ne $old_docu

matched.

und die
Code: (dl )
 if(/^$zahl2\;(^[;]+)/) 

matched auch nicht.
Müsste eher in die Richtung gehe:
Code: (dl )
if(/^$zahl2\;(\w+)/)

Wobei hier keine Gedankenstriche und Unterstriche berücksichtigt sind

gr
cm
bloonix
 2006-05-11 19:53
#65973 #65973
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=cm,11.05.2006, 17:21]
Code: (dl )
 if(/^$zahl2\;(^[;]+)/) 

matched auch nicht.
Müsste eher in die Richtung gehe:
Code: (dl )
if(/^$zahl2\;(\w+)/)
[/quote]
ne, nicht wenn leerzeichen und bindestriche etc. darin enthalten
sind. das hütchen muss einfach eine position nach rechts versetzt
werden, dann wird alles bis zum nächsten ";" gematcht.

Code: (dl )
 if(/^$zahl2\;([^;]+)/) 
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
renee
 2006-05-11 19:59
#65974 #65974
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
 if(/^$zahl2\;(^[;]+)/)


hier müsste das zweit ^ in die eckige Klammer!
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/
cm
 2006-05-11 20:03
#65975 #65975
User since
2006-04-27
25 Artikel
BenutzerIn
[default_avatar]
einfach einfach ;)
Ronnie
 2006-05-11 20:28
#65976 #65976
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
@shaihulud: Beschreib doch bitte mal wie das Ergebnis aussehen soll! Was soll das mit den beiden Dateien geschehen und wie soll die Datenstruktur aussehen (und wofür wird diese dann genutzt)?
shaihulud
 2006-05-11 20:28
#65977 #65977
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
oki danke für die hilfe. hab jetzt noch ein problem. er schafft bei dieser abfrage:

if (/(\w+)\;(\d+)\;(\d+)\;/){

alles zu kriegen bis auf
$LOG$


was muss ich anstatt w+ hinschreiben um das auch zu matchen?
renee
 2006-05-11 20:37
#65978 #65978
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
if (/([\w\$]+)\;(\d+)\;(\d+)\;/){


das $ ist nicht in \w enthalten. Was die einzelnen Klassen sind, kann auch in perlretut nachgelesen werden.
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/
<< >> 8 Einträge, 1 Seite



View all threads created 2006-05-11 17:51.