我正在解析一个大的.CSV文件,并且由于Excel和Microsoft的无限帮助而遇到了一个问题 - 在Excel中打开.CSV文件以便在它到达我之前清除很多问题,但是现在我有一个字段,其中添加了前导零。 Excel不起作用(至少我发现),因为此特定字段是ProductNumber,可以包含字母和数字的任意组合。问题出现是因为某些产品编号以点开头,即 - .12345678。有时点后来 - 12.345678,有时没有点 - 123456789,有时字母和/或字母和数字混合 - ABCDEFGHI或A12D34G56。
在每种情况下,字段必须为9个字符或更少。但Excel通过一个以“小数点(十进制)”开头的任何ProductNumber的“有用”前导零 - 所以我有0.12345678,将其变成一个10个字符的ProductNumber。我需要修剪前导零 - 仅在字段以“0”开头的情况下。有很多产品编号以“10”,“20”开头。等等。不想碰那些。
那么,在我解析时,有没有办法让我使用标量变量?
所以,说我的文件有
0.12345678
10.123456
A12B34C56
ABCDEFGHI
我有这样的事情开始 -
my $filename = 'test.csv';
open my $FH, $filename
or die "Could not read from $filename <$!>, program halting.";
# Read the header line.
chomp(my $line = <$FH>);
my @fields = split(/,/, $line);
print Dumper(@fields), $/;
my @data;
# Read the lines one by one.
while($line = <$FH>) {
# split the fields on the comma.
chomp($line);
my @fields = split(/,/, $line);
# Remove leading zero on ProductNumber Field
$_ = for $fields[17];
答案 0 :(得分:4)
我需要修剪前导零 - 仅在场的情况下 以“0”开头。
您可以使用正则表达式将前导0.
替换为.
,从而有效删除零。
my @data;
# Read the lines one by one.
while($line = <$FH>) {
# split the fields on the comma.
chomp($line);
my @fields = split(/,/, $line);
# Remove leading zero on ProductNumber Field
$fields[17] =~ s/^\s*0\././;
让我解释一下正则表达式
^ - Match the start of the string
\s* - Match zero or more spaces
0\. - Match the number zero followed by a dot character