我在Perl中遇到了一个脚本问题。
我有一个文本文件作为输入
Hello -> good 0.1 0.2 0.3
Hello -> morning 1 2 0.6
脚本如此划分:(输出)
Hello |||good ||| 0.1/0.2 0.2/0.3 2.718
Hello ||| morning ||| 1/2 2/0.6 2.718
这是我目前的剧本:
#!/usr/bin/perl
use strict;
use warnings;
use feature qw(:5.10);
my ($fichier1) = "fichier1.txt";
open my $FIC1, "<", $fichier1, or die "impossible ouvrir $fichier1 $! \n";
open(FICHIERNOUVELLES, ">resultat.txt");
while (my $line1 = <$FIC1>) {
chomp $line1;
my ($texte, $value1, $value2, $value3) = ($1, $2, $3, $4) if $line1 =~ /^([a-zA-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏñœ=ÒÓÔÕÑÖæñßÙÚÛÜÝàáâãäåçèéêëìíîïðòóô-õöùúûüý@#-%&*_\s]+)([.\d]+)$/;
my $tot_val1 =sprintf("%.15f", $value1 * $value2);
my $tot_val2 =sprintf("%.15f", $value2 * $value3);
print "$texte $tot_val2\n";
print FICHIERNOUVELLES "$texte ($tot_val2)\n";
}
close FICHIERNOUVELLES;
close $FIC1;
我的剧本中有2个错误:
&#34;在连接(。)或字符串中使用未初始化的值$ texte perl.pl第18行,第1行。
在perl.pl的乘法(*)中使用未初始化的值$ value2 第14行,第2行。
请问好吗? 非常感谢
答案 0 :(得分:1)
答案 1 :(得分:1)
您的代码与您的问题不符,所以我很难理解您的需求。例如,你要求
Hello |||good ||| 0.1/0.2 0.2/0.3 2.718
在您的输出中,但您的代码将值相乘。我无法分辨2.718
来自哪里(它只是 e 的价值?)
但是,您应该使用split
将数据分隔为列。此代码显示了这个想法。
不会显示$tot_val2
的值,因为这就是您自己的代码中的值。另外,我不确定您是否需要第一个或第二个文本字段。我已经展示了第一个。如果你需要,第二个是$colonnes[0]
。
use strict;
use warnings;
use autodie;
use 5.010;
my ($fichier1) = 'fichier1.txt';
open my $fic1, '<', $fichier1;
open my $fn, '>', 'resultat.txt';
while (<$fic1>) {
my ($texte, $reste) = split /\s*->\s*/;
my @colonnes = split ' ', $reste;
my ($value1, $value2, $value3) = @colonnes[1..3];
my $tot_val1 =sprintf('%.15f', $value1 * $value2);
my $tot_val2 =sprintf('%.15f', $value2 * $value3);
print "$texte $tot_val2\n";
print $fn "$texte ($tot_val2)\n";
}
close $fn;
<强>输出强>
Hello 0.060000000000000
Hello 1.200000000000000