我想读一个文件来提取几行信息.我创建了一个do ..直到忽略文件行,直到我到达我真正感兴趣的部分,其中包含单词V2000.我更喜欢使用一般的正则表达式而不是寻找V2000.
匹配被找到,但它没有突破do .. until循环,因此我无法提取紧接着之后的信息
有谁知道为什么?
do {$line = <IN_SDF>;} until ($line =~ m/V\d+/);
Run Code Online (Sandbox Code Playgroud)
其余的代码是:
my @aline = split ('', $line);
my $natoms = $aline[0];
my $out= shift;
do{
<IN_SDF>;
@aline = split ('', $_);
print OUT_3D $aline[3]."\t".$aline[0]."\t".$aline[1]."\t".$aline[2]."\n";
} until --$natoms == 0;
Run Code Online (Sandbox Code Playgroud)
mob*_*mob 14
你假设是裸露的吗?
<IN_SDF>
Run Code Online (Sandbox Code Playgroud)
将从该文件句柄加载下一行到$_?那是不对的.您只能使用while表达式获得该行为:
while (<IN_SDF>) is equivalent to while (defined($_=<IN_SDF>))
Run Code Online (Sandbox Code Playgroud)
如果你的意思是
$_ = <IN_SDF>
Run Code Online (Sandbox Code Playgroud)
然后说出来.
对于你问题的第一部分,这个成语:
while ($line = <IN_SDF>) {
last if $line =~ m/V\d+/;
}
Run Code Online (Sandbox Code Playgroud)
比较好
do {
$line = <IN_SDF>
} until $line =~ m/V\d+/;
Run Code Online (Sandbox Code Playgroud)
因为后一个表达式将在输出用完时进入无限循环(并$line变为未定义).
| 归档时间: |
|
| 查看次数: |
8246 次 |
| 最近记录: |