Thread Dateien einlesen und durchsuchen (17 answers)
Opened by INIING at 2012-06-28 15:05

INIING
 2012-06-29 14:23
#159468 #159468
User since
2012-06-28
21 Artikel
BenutzerIn
[default_avatar]
Hallo, danke für die Antworten. Es werden XML-dateien eingelesen. Im 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. Habe hier nocheinmal den code eingefügt, Kommentiert, was ich tun möchte und was ich nicht verstanden haben. Also schon mal Danke für eure Hilfe. Freue mich über Ideen, Rat- und Verbesserungsvorschäge.


Code (perl): (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
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
      }
    }
  }
}

View full thread Dateien einlesen und durchsuchen