我用字符串值构建了一个二维数组。总共有12列但行数有所不同。现在我想构建每行的字符串,但是当我运行以下代码时:
$outstring = "";
for ($i=0; $i < $ctrLASTROW + 1; $i++) {
for ($k=0; $k < 12; $k++){
$datastring = $DATATABLE[$i][$k]);
$outstring .= $datastring;
}
}
$outstring
取第一个值。然后在第二个内循环和后续循环中,$outstring
中的值被覆盖。例如,第一个值是"DATE"
,然后下一次值"ABC"
被送到它。而不是"DATEABC"
"ABCE"
的希望。 "E"
是DATE
的第四个字符。我想我错过了标量/列表问题,但我已经尝试过谁知道有多少变化无济于事。当我第一次开始时,我直接从@DATATABLE
尝试了连接。同样的问题。只有更快。
答案 0 :(得分:4)
当您遇到诸如连接两个字符串DATE
和ABC
之类的问题,并且最终结果为ABCE
或其中一个字符串覆盖另一个字符串时,可能的情况是你有一个来自另一个操作系统的文件,其行结尾\r\n
是chomp
,在连接时产生字符串DATE\rABC
,然后在打印时变为ABCE
换句话说:
my $foo = "DATE\r\n";
my $bar = "ABC\r\n"; # \r\n line endings from file
chomp($foo, $bar); # removes \n but leaves \r
print $foo . $bar; # prints ABCE
要确认,请使用
use Data::Dumper;
$Data::Dumper::Useqq = 1;
print Dumper $DATATABLE[$i][$k]; # prints $VAR1 = "DATE\rABC\r";
要解决问题,而不是chomp
使用正则表达式,例如:
$foo =~ s/[\r\n]+\z//;