Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8322[/thread]

Kommandozeile mit einem Schalter und zwei Argument: ein Argument fällt immer unter den Tisch



<< |< 1 2 >| >> 20 Einträge, 2 Seiten
Timo_81
 2006-09-12 18:19
#69765 #69765
User since
2006-09-12
10 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi ,
ich bin neu hier im Forum und  habe folgendes Problem:

Ich möchte folgende Kommandozeile implementieren:

Programmname -d file1 file2

Für die Schalter nehm ich getopts und für die Argumente wollte ich @ARGV abfragen.
Nur ist immer nur file2 in @ARGV


Mein Code:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use vars qw($opt_d $opt_x $opt_h);
use Getopt::Std;
#
&getopts("a::d::h")||die "ERROR: No such option. -h for help\n";
&help if ($opt_h);

if ($opt_a){
   printf("not implemented.");
}elsif ($opt_d){
$base = shift(@ARGV);
$base2= shift(@ARGV);

 print $base;
 print $base2;
etc.
_______________________________________________


Leider wird nur file2 gespeichert!

Hat jemand ne Idee?

Gruß
Timo

edit pq: code-tags hinzugefügt\n\n

<!--EDIT|pq|1158072508-->
renee
 2006-09-12 20:11
#69766 #69766
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nimm CPAN:Getopt::Long:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/perl

use strict;
use warnings;
use Getopt::Long;

GetOptions('-d' => \my $d_schalter);

my @files = @ARGV;
print $_,"\n" for @files;
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/
Timo_81
 2006-09-13 02:23
#69767 #69767
User since
2006-09-12
10 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi ,
danke für die Antwort , aber gibt es die Möglichkeit durch abändern kleiner Teile es in das Programm einzubauen?
Ich habe leider noch nicht so viel Erfahrung mit PErl und war froh das programm bis auf diese Kleinigkit fertigzushaben.

LG
Timo
renee
 2006-09-13 10:50
#69768 #69768
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [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
#!/usr/bin/perl

use strict;
use warnings;
use Getopt::Long;

use vars qw($opt_d $opt_a $opt_h);

#
GetOptions("-a" => \$opt_a,
"-d" => \$opt_d,
"-h" => \$opt_h,);

help() if ($opt_h);

if ($opt_a){
print "not implemented.";
}
elsif ($opt_d){
my $base = shift(@ARGV);
my $base2= shift(@ARGV);

print $base;
print $base2;
}


Lies Dir bitte mal diesen Wiki:Artikel durch.

Wenn Du mal nicht nur reine Flags haben willst, sondern auch Argumente für die Optionen haben willst, dann muss es mal so aussehen:

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
#!/usr/bin/perl

use strict;
use warnings;
use Getopt::Long;

use vars qw($opt_d $opt_a $opt_h $argument);

#
GetOptions("-a" => \$opt_a,
"-d" => \$opt_d,
"-s=s" => \$argument,
"-h" => \$opt_h,);

help() if ($opt_h);

if ($opt_a){
print "not implemented.";
}
elsif ($opt_d){
my $base = shift(@ARGV);
my $base2= shift(@ARGV);

print $base;
print $base2;
}

if(defined $argument){
print $argument;
}


meh unter CPAN:Getopt::Long.
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/
renee
 2006-09-13 12:28
#69769 #69769
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du kannst keine Option mit zwei Argumenten haben. Was Du machen kannst ist:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl

use strict;
use warnings;
use Getopt::Long;

my (@files,$opt_a,$opt_h);

#
GetOptions("-a" => \$opt_a,
"-d" => \@files,
"-h" => \$opt_h,);

help() if ($opt_h);

if ($opt_a){
print "not implemented.";
}
elsif ($opt_d){
print $_,"\n" for(@files);
}


Aufruf: programm.pl -d file1 -d file2
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/
vayu
 2006-09-13 12:44
#69770 #69770
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
er könnte die files auch so übergeben und sie sich hinterher auseinander split'ten

-d file1;file2;file3
renee
 2006-09-13 12:48
#69771 #69771
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Warum nicht die Features eines Moduls verwenden? Da muss er einen zusätzlichen Schritt machen um an die einzelnen Dateinamen zu kommen ansonsten macht es das Modul.
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/
Gast Gast
 2006-09-13 13:25
#69772 #69772
Hallo ,
danke für die Antworten.
Nun würde ich gerne falsche Angaben ausschließen.
Sprich wenn man nur eine Datei statt zwei angibt.

muss ich doch irgend ein Die hinsetzen oder?

LG Timo und danke bislang
renee
 2006-09-13 13:33
#69773 #69773
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [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
#!/usr/bin/perl

use strict;
use warnings;
use Getopt::Long;

my (@files,$opt_a,$opt_h);

#
GetOptions("-a" => \$opt_a,
"-d" => \@files,
"-h" => \$opt_h,);

help() if ($opt_h);

if ($opt_a){
print "not implemented.";
}
if (@files){
print $_,"\n" for(@files);
die "Nicht genügend Dateien" if(scalar(@files) < 2);
}

sub help{
print "help";
exit;
}
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/
Dubu
 2006-09-13 14:17
#69774 #69774
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Sorry, aber müssen die Dateinamen wirklich zu der Option -d gehören?
So, wie ich es bisher verstanden habe, reichen Timo einerseits Optionen und andererseits zwei Dateinamen als Parameter, evtl. abhängig davon, ob eine bestimmte Option gesetzt ist.
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
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;

my ($opt_a, $opt_d);

# Optionen auswerten
GetOptions(
   a    => sub { die "noch nicht implementiert" },
   d     => \$opt_d,
   'h|help'    => \&help,
) or help();

# Restliche Argumente in @files
my @files = @ARGV;

# Wenn $opt_d, dann müssen zwei Argumente da sein!
die "zu wenig Argumente" if $opt_d && scalar @files < 2;

# und so weiter

sub help {
   print <<EOT;
Usage: ...
EOT
   exit -1;
}

(ungetestet)

Wenn dem nicht so ist: Timo, könntest du etwas genauer beschreiben, wie Optionen und Parameter zusammenhängen sollen?\n\n

<!--EDIT|Dubu|1158142719-->
<< |< 1 2 >| >> 20 Einträge, 2 Seiten



View all threads created 2006-09-12 18:19.