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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
use Getopt::Long; # Parameteruebergabe # Uebergabeparameter einlesen GetOptions ('i=s' , \$infile1); open (FILE1,"<$infile1")||die "\n Datei $infile1 konnte nicht geoeffnet werden\n"; print $infile1; i=0; while(<FILE1>){ if($_ =~ m/.datafield$/i){ my '$datei i' = m/^c:\\/i && m/.datafield$/i; #open(FILE2,"<$pfad")||die "\n Datei $infile1 konnte nicht geoeffnet werden\n"; my @dateien =($datei i); i++; } } open( my @Datafield_List = <FILE1>; foreach(@Datafield_List){ if } # foreach $zeile (@Datafield_List_Inhalt){ while (<FILE1>){ if($_ =~ m/<Measurement/i | $_ =~ m/<Parameter/i){ while(<FILE1>){ if($_ =~ m/nameAsap2/i && m/(\w{32})/){ my $File = $infile1; my $zeile = $_; print "\n !!! FEHLER !!! \n"; print "In der Datei '$File' besitzt folgender Strukturmember eine groessere Zeichenkette als 32 Zeichen: '$&–'\n Der Bezeichnername ist in der folgenden Zeile als nameASAP2 bezeichnet: '$zeile'"; #system("command", 8) und '$1' für den ersten Treffer } elsif($_ =~ m/name/i && m/(\w{32})/){ my $File = $infile1; my $zeile = $_; print "\n !!! FEHLER !!! \n"; print "In der Datei '$File' besitzt folgender Strukturmember eine groessere Zeichenkette als 32 Zeichen: '$1'"; #system("command", 8) nur zum abbruch, bräuchte ich eine besser Lösung } until($_ =~ m/>/) if($_ =~ next; } } } print "\nAlle Strukturmember besitzten eine Zeichenkette von weniger als 32 Zeichen.\n"; close $FILE1; #exit (1);
2012-06-28T13:05:29 INIINGCode (perl): (dl )1 2 3 4 5 6 7 8 9 10 11 12 13 14i=0; while(<FILE1>){ if($_ =~ m/.datafield$/i){ my '$datei i' = m/^c:\\/i && m/.datafield$/i; #open(FILE2,"<$pfad")||die "\n Datei $infile1 konnte nicht geoeffnet werden\n"; my @dateien =($datei i); i++; } } open( my @Datafield_List = <FILE1>;
1
2
3
<Measurement name="nur ein test">
<!-- Weitere Werte die nicht bekannt sind-->
</Measurement>
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64
#!/usr/bin/perl use strict; use warnings; use Getopt::Long; # Parameteruebergabe # Uebergabeparameter einlesen GetOptions ('i=s' , \$infile1); print "$infile1\n"; open ( my $in1_fh, '<', $infile1) || die "\n Datei $infile1 konnte nicht geoeffnet werden ($!)\n"; my @Datafield_List = <$in1_fh>; close($in1_fh); chomp(@Datafield_List); my $i=0; for my $zeile (@Datafield_List) { if($zeile =~ m/\.datafield$/i) { # was du hier machen willst weiß ich nicht #my $pfad = ... ; #open(my $in2_fh,'<', $pfad) || die "Datei $pfad konnte nicht geoeffnet werden($!)\n"; # ... $i++; } } for my $zeile (@Datafield_List) { # finde in der Zeile was nach <name ...parameter...> aussieht if($zeile =~ m/<(\w+)\s*(.*?)\s*>/i) { # gefundener Name des XML-Tags my $name=$1; # parameter in dem XML-Tag my $params=$2; # weiter wenn nicht der gesuchte Tag next unless($name eq 'Measurement' or $name eq 'Parameter'); # finde in $params alles was nach key="wert" aussieht: while($params =~ /(\w+)\s*=\s*"([^"]+)"\s*/gc) { my $key=$1; my $val=$2; # weiter wenn $key nicht "nameAsap2" oder "name" next unless( $key eq 'nameAsap2' or $key eq 'name' ); # wenn Länge des Inhalts größer als 32 Zeichen if(length($val) > 32) { my $File = $infile1; print "\n !!! FEHLER !!! \n"; print "In der Datei '$File' besitzt folgender Strukturmember eine groessere Zeichenkette als 32 Zeichen: '$val'\n" print "Der Bezeichnername ist in der folgenden Zeile als $key bezeichnet: '$zeile'\n"; #system("command", 8) und '$1' für den ersten Treffer } } } } print "\nAlle Strukturmember besitzten eine Zeichenkette von weniger als 32 Zeichen.\n";
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
#!/usr/bin/perl use strict; use warnings; use Getopt::Long; # Parameteruebergabe # Uebergabeparameter einlesen GetOptions ('i=s' , \$infile1); print "$infile1\n"; open my $FILE_Complete_List ">C:\\Complete_List.datafield" | die "\n Die Datei Complete_List.datafield konnte nicht erstellt werden ($!)\n"; close $FILE_Complete_List; open ( my $FILE1, '<', $infile1) || die "\n Die Datei $infile1 konnte nicht geoeffnet werden ($!)\n"; my @Datafield_List = <$FILE_Input>; #Inhalt von FILE1 in FILE_Complete_List schreiben, bzw. an das Ende des Files anhängen um es nach doppelten Einträgen durchsuchen zu können close($FILE1); chomp(@Datafield_List); chomp(&FILE_Complete_List); #FILE_Complete_List durchsuchen nach doppelten Einträgen close($FILE_Complete_List); my $i=0; for my $zeile (@Datafield_List) { if($zeile =~ m/\.datafield$/i) { # was du hier machen willst weiß ich nicht // ich wollte mehrere skalare erstellen mit aufsteigenden Nummern versehen, in ein Array reinpacken oder ähnliches, oder in einen string ...???, für das durchsuchen aller gleichzeitig, also brauche ich wohl nicht #my $pfad = ... ; #open(my $in2_fh,'<', $pfad) || die "Datei $pfad konnte nicht geoeffnet werden($!)\n"; # ... $i++; } } for my $zeile (@Datafield_List) { # finde in der Zeile was nach <name ...parameter...> aussieht if($zeile =~ m/<(\w+)\s*(.*?)\s*>/i) # ich suche nach < gefolgt (direkt?) nach irgendeiner Zeichenfolge, die ein Steuerzeichen und Steuerzeichen bestehen, gefolt von belieben Zeichen? Kann ich da eine kleine Erklärung haben? { # gefundener Name des XML-Tags my $name=$1; #aus der 1. Klammer?? # parameter in dem XML-Tag my $params=$2; #aus der 2. Klammer?? bräuchte hierzu eine kleine Erklärung von der oberen Suche # weiter wenn nicht der gesuchte Tag next unless($name eq 'Measurement' or $name eq 'Parameter'); # finde in $params alles was nach key="wert" aussieht: while($params =~ /(\w+)\s*=\s*"([^"]+)"\s*/gc) #kannst du mir dazu etwas erklären { my $key=$1; my $val=$2; # weiter wenn $key nicht "nameAsap2" oder "name" next unless( $key eq 'nameAsap2' or $key eq 'name' ); # wenn Länge des Inhalts größer als 32 Zeichen if(length($val | $ $key) > 32) { my $File = $infile1; print "\n !!! FEHLER !!! \n"; print "In der Datei '$File' besitzt folgender Strukturmember eine groessere Zeichenkette als 32 Zeichen: '$val'\n" print "Der Bezeichnername ist in der folgenden Zeile als $key bezeichnet: '$zeile'\n"; #system("command", 8) und '$1' für den ersten Treffer } } } }
2012-06-29T12:23:57 INIINGIm make File wird das Compilertool angewiesen eine Liste mit Dateien auszugeben. Im make übergebe ich diese meinem Perl-Skript und lese die gesamte Liste ein, da ich diese nach mehrfach vorkommenden namen und asap2-namen durchsuchen möchte. Weiterhin wird nach den oben genannten Bedingungen gesucht.
2012-06-29T22:29:43 topeg[...]
Hau nicht einfach irgendwelche Zeichenketten in den Code. so was: length($val | $ $key) ist Unsinn. Ich kann nicht mal erraten was du da machen wolltest.
[...]
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="ISO-8859-1"?>
<LIMOOXxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="D:/dff.language.xsd">
<Module name="CDD_DQC_Mea" FunctionGroupDefault="CDD_DQC" nameM="'CDD_DQC'">
<Class name="CDD_DQC" SectionDefault="Section.Online">
<Measur name="DQC_Local_IQ_Delta_OutData" Type="t.T__SI16" />
<Measur name="DQC_Out__Ausgang" Type="t.T_ST_SI16" />
<Measur name="DQC_Out_Ausgang" Type="t.T__SI16" />
<Measur name="DQC_Out__Lp" Type="t.T_SI16" />
<Measur name="DQC_OLp" Type="t.T_SI16" />
</Class>
</Module>
</LIMOOX>