CyRhmU.jpeg
查看: 1471  |  回复: 5
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

li_clifff

银虫 (正式写手)

[求助] 请教Windows系统下perl脚本的ARGV应用问题,谢谢

在Windows Xp,Perl脚本文件make_FENE.pl如下:

#! C:\strawberry\perl\bin\perl.exe

sub PAR {
open(P,"> _parameter" );
print P< \&LIST
BD        = .$BD.
BDzeta    = $BDzeta
MDblocks  = $blocks
MDsteps   = $steps
T         = $T
dt        = $dt
FENECdist = $FENECdist
shearrate = $shearrate
/
EOF
};

$OK=0;
$BDzeta = "0.0";
$shearrate = "0.0";
foreach $i (0 .. $#ARGV) {
($quant,$value) = split(/=/,$ARGV[$i]);
if ($quant eq "BD" )                 { $BD=$value; $OK=$OK+1; };
if ($quant eq "blocks" )         { $blocks=$value; $OK=$OK+1; };
if ($quant eq "steps" )         { $steps=$value; $OK=$OK+1; };
if ($quant eq "T" )              { $T=$value; $OK=$OK+1; };
if ($quant eq "dt" )             { $dt=$value; $OK=$OK+1; };
if ($quant eq "FENECdist" )         { $FENECdist=$value; $OK=$OK+1; };
if ($quant eq "BDzeta" )         { $BDzeta=$value; $OK=$OK+1; };        
if ($quant eq "shearrate" )     { $shearrate=$value; };

if ($quant eq "Np" )                  { $Np=$value; };
if ($quant eq "boxx" )                 { $boxx=$value; };
if ($quant eq "boxy" )          { $boxy=$value; };
if ($quant eq "boxz" )          { $boxz=$value; };       
};

PAR;
在CMD窗口的当前目录下直接 perl make_FENE.pl, 生成_parameter文件:
&LIST
BD        = ..
BDzeta    = 0.0
MDblocks  =
MDsteps   =
T         =
dt        =
FENECdist =
shearrate = 0.0
/
但是我希望怎样在窗口能够出现命令行如
BD =   
然后我在键盘上敲入这个值,依次类推,最后生成的_parameter里的数值是由我键盘输入的。上述的脚本应该怎么改进,请大家帮帮忙,非常感谢!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zideiwuying

金虫 (初入文坛)


xzhdty(金币+1): 欢迎讨论交流 2012-02-07 23:40:01
不知道上面代码中怎么加入了表情
if(chomp($num= < 0){
        print "read from stdin error\n";
}else{
        print "num=[$num]\n";
}
3楼2012-02-07 15:13:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 6 个回答

zideiwuying

金虫 (初入文坛)

【答案】应助回帖


感谢参与,应助指数 +1
xzhdty(金币+1): 欢迎讨论交流 2012-02-07 23:39:42
楼主你好,如果我没有理解错的话你的意思是想接收键盘的输入,并将该值赋给变量,变量接收键盘输入可以使用“$变量名=”的方式实现,此时的变量需要使用chomp函数进行处理,下面是测试代码:
if(chomp($num=<0){
        print "read from stdin error\n";
}else{
        print "num=[$num]\n";
}
chomp函数的功能请楼主自己百度,下面的代码可以测试chomp的作用:
$test=;
print "[$test]\n";
chomp($test);
print "[$test]\n";
2楼2012-02-07 15:12:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li_clifff

银虫 (正式写手)


jjdg(金币+1): 欢迎讨论 2012-02-08 23:32:56
引用回帖:
3楼: Originally posted by zideiwuying at 2012-02-07 15:13:31:
不知道上面代码中怎么加入了表情
if(chomp($num=<STDIN> < 0){
        print "read from stdin error\n";
}else{
        print "num=[$num]\n";
}

谢谢,问题解决了,我用这样的:

perl make_FENE.pl  BD=false blocks=10  steps=500 T=1.0 dt=0.005 FENECdist=1.20 shearrate=0

就可以了,剩下一个小问题是
sub PAR {
open(P,"> _parameter" );
print P< \&LIST
BD        = .$BD.
BDzeta    = $BDzeta
MDblocks  = $blocks
MDsteps   = $steps
T         = $T
dt        = $dt
FENECdist = $FENECdist
shearrate = $shearrate
/
EOF
};
如果我要生成的_parameter文件放在某个确定的目录下,比如 D:\perl\document, 该怎么改呢?
4楼2012-02-07 18:18:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li_clifff

银虫 (正式写手)


jjdg(金币+1): 感谢参与 2012-02-08 23:32:40
引用回帖:
2楼: Originally posted by zideiwuying at 2012-02-07 15:12:21:
楼主你好,如果我没有理解错的话你的意思是想接收键盘的输入,并将该值赋给变量,变量接收键盘输入可以使用“$变量名=<STDIN>”的方式实现,此时的变量需要使用chomp函数进行处理,下面是测试代码:
if(ch ...

可能不大一样,不过您说的这种我也很感兴趣的,我会试试看,谢谢
5楼2012-02-07 18:27:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见