有人可以帮我解决以下问题: 我想从输入文件中提取数值并执行数学运算。
输入文件样本
string txt
text0 = 40,
text1 = 2;
string text1 txt
我想将text0和text1收集到具有相同名称和
的变量中打印“$ text0 / text1”;
在文件读取结束时。请注意,text1是文件其他部分字符串的一部分,需要忽略。
我正在使用此代码,但由于代码的其他部分中的“text1”而失败,
while (<PH>) {
chomp;
if ($_ =~ "text0") {
my $data = $_;
my @temp = split (' ', $data);
$text0 = $temp[2];
$text0 =~ s/,//;
}
if ($_ =~ "text1") {
my $data = $_;
my @temp = split (' ', $data);
$text1 = $temp[2];
$text1 =~ s/;//;
}
}
my $final = $text0/text1;
print "$final\n";
对我的基本代码的任何改进也都会受到影响。
问候
答案 0 :(得分:0)
至少,您需要在匹配测试中为“起始线”(这是一个插入符号)添加一个锚:
if ($_ =~ "^text0") {
和
if ($_ =~ "^text1") {
答案 1 :(得分:0)
此代码段会逐行读取您的输入,如果找到匹配项,则会将text0 =
后面的任何数字指定给变量$text1
,text1
也会相同。然后它在循环外打印两个变量:
use warnings;
use strict;
open my $input, '<', 'in.txt';
my ($text1, $text2);
while(<$input>){
chomp;
($text1) = $1 if /text0 = (\d+)/;
($text2) = $1 if /text1 = (\d+)/;
}
print "Text0 = $text1\nText1 = $text2\n";
答案 2 :(得分:0)
perl -lne '$1==1?(print $a/$2):($a=$2) if(/text([0-1]) = ([\d]+)/);' your_file