Thread Filelist: Dateien öffnen (39 answers)
Opened by INIING at 2012-07-05 14:14

INIING
 2012-07-13 14:54
#159815 #159815
User since
2012-06-28
21 Artikel
BenutzerIn
[default_avatar]
Hallo, erstmal danke für die Hilfe. Also das stimmt, regelmäßig kann ich hieran nicht arbeiten und es geht um das Skript aus dem anderen Thread.
Zu der übergegebenen Datei: In einem Makefile kann ich einstellen, ob ich die gesamte Liste, in einer Datei an mein Perlskript übergeben bekomme, oder ob ich in einer Schleife jeweils einen Wert -i, was einem Pfad entspricht an mein Skript übergeben bekommen möchte. Jedoch habe ich, nachdem die Anforderung an mein Skript verändert wurde, mich entschieden, die gesamte Liste einzulesen - Grund: Ich möchte die anderen Files der Fileliste durchsuchen, ob ein Name doppelt vorhanden ist, und aus diesem Grund ist mir keine bessere Lösung eingefallen, ist eine andere Lösung leichter, besser, ...? Zuletzt hatte ich mein Skript soweit angepasst. Aber es öffnet die Datei nicht, worin liegt das?

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
use warnings;
use Getopt::Long;       # Parameteruebergabe
#use strict;

my $infile1;

# Uebergabeparameter einlesen
GetOptions ('i=s' , \$infile1);
print "ueberarbeitetesperlskript.pl, Version 1.0";
my @Datafield_List;

my @Suchergebnisse;
# Datafield Datei einlesen
open (FILE1, "<$infile1") || die "\n Die Datei '$infile1' konnte nicht geoeffnet werden\n";


@files = split(//, &infile1);

while (@files = readdir(FILE1)){
        print " @files ";
        for($i=0; $i < (@files); $i++){
        
        $pfad = $files[$i];
        

        opendir (File, $pfad) || die "\n Die Datei $infile1 konnte nicht geoeffnet werden ($!)\n";
        my @tmp;
        @tmp = File;
        
        push (@Datafield_List,"\n");
        push (@Datafield_List,@tmp);
        close File;
}
}

my $line_nr=0;

while(my $zeile=@Datafield_List)
{
  chomp($zeile);
  $line_nr++;

  # <name...parameter...> 
  if($zeile =~ m/<(\w+)\s+(.*?)\s*>/i)
  {
    my $name=$1; 
    my $params=$2; 

    next unless($name eq 'Measurement' or $name eq 'Parameter');

    # key="wert"
        
        my $aktZeile;   
        
    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' );
          
                find_double(@Datafield_List);

      # wenn Länge des Inhalts größer als 32 Zeichen
      if(length($key) > 32)
      {
        my $File = $infile1; #Problem, da die gesamte Liste eingelesen wird. Beim Einlesen vllt etwas noch in das Array schreiben, also zwischen den beiden push-Operationen noch ein push Opberator "bla den Dateinamen"
        print "\n   !!! FEHLER !!!  \n";
        print "In der Datei '$File' Zeile $line_nr besitzt folgender Strukturmember eine groessere Zeichenkette als 32 Zeichen: '$key'\n"
        #print "Der Bezeichnername lautet '$val'\n";
      }
                my $value;
      # Wert in $val noch unbekannt ist?
          while  (@Suchergebnisse){
                        if($_ =~ m/$val/i){
                                print "\n   !!! FEHLER !!!  \n";
                                print "\nDer '$key': '$val' ist doppelt vergeben. \n";
                        }
                        else
                        {
                        
                                # den Wert in $val oder $key zur Liste der Suchergebnisse hinzufügen
                        
                                $Suchergebnisse[++$#Suchergebnisse] = $val;
                        }
                
                }
        }
  
}
print "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ROGER !!!!!!!!!!!!!!!!!!!!!!! ";
}

Last edited: 2012-07-13 15:30:01 +0200 (CEST)

View full thread Filelist: Dateien öffnen