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

topeg
 2012-07-06 13:41
#159642 #159642
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Ich habe nun einige Zeit damit verbracht zu erraten, was du meinen könntest. Mit den Informationen, die du nach und nach weiter gegeben hast, konnte ich ein paar Vermutungen aufstellen.
  • Du arbeitest schon seit einiger Zeit an einem Script
  • Du bist Anfänger
  • Du arbeitest nicht ständig an dem Script.

Daraus lässt sich folgern:
  • Du arbeitest an dem Selben Script wie aus deinem Letzten Thread "Filelist: Dateien öffnen".
  • Du hast das Script ueberarbeitetesperlskript.pl genannt.
  • Du willst Übergabeparameter an das Script verarbeiten.
  • Es sollen mehrere Pfade übergeben werden
  • Der Script Aufruf wird automatisch generiert


Ich werde das Script von mir aus msg #159479 heran ziehen.
Dort steht:
Code (perl): (dl )
1
2
# Uebergabeparameter einlesen
GetOptions ('i=s' , \$infile1);


Das ließt aber nur einen Parameter ein. Du willst, wie es scheint mehrere Parameter übergeben. -i scheint dabei die einzige Option zu sein.

Man kann CPAN:Getopt::Long sagen, dass eine Option mehrfach verwendet werden kann:

Code (perl): (dl )
1
2
3
4
5
6
my @infiles;

#...

# Uebergabeparameter einlesen
GetOptions ('i=s' , \@infiles);


Damit kann man nun schreiben:

ueberarbeitetesperlskript.pl -i file1.datafield -i file2.datafield -i fil3.datafield -i file4.datafield

Du hast aber etwas anderes da stehen.
Die Parameterübergabe muss also etwas anders aussehen.

Die Werte, die in der Kommandozeile stehen, werden bei Perl im Array @ARGV gespeichert. CPAN:Getopt::Long greift darauf zu und nimmt die Sachen heraus die es erkennt. Hier bedeutet es, dass die restlichen Pfade noch in @ARGV stehen, nachdem CPAN:Getopt::Long die Option 'i' entfernt hat. Man kann nun schreiben:

Code (perl): (dl )
push(@infiles,@ARGV);


Damit sind alle restlichen Pfade in @infiles

Also der Anfang des Scripts vollständig:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;       # Parameteruebergabe

my @infiles;
my $outfile='C:\Complete_List.datafield';

# Uebergabeparameter einlesen
GetOptions ('i=s' , \@infiles);
push(@infiles,@ARGV);

print "$_\n" for(@infiles);


Hättest du all das was ich habe folgern müssen gleich von Anfang an gesagt, so hätten wir alle viel Zeit gespart.

EDIT: Eine Zeile im Code vergessen.
Last edited: 2012-07-06 14:12:50 +0200 (CEST)

View full thread Filelist: Dateien öffnen