Perl – 使用文本和数字在字段中删除前导零

我正在parsing一个大的.CSV文件,并且由于Excel和微软的无穷帮助而遇到了问题 – 在Excel中打开了.CSV文件以清除很多问题,但是现在我已经已经添加了前导零的字段。 Excel不起作用(至less我发现),因为这个特定的字段是ProductNumber,可以有任何字母和数字的组合。 问题出现了,因为一些产品号码以点开头,即 – .12345678。 有时网点稍后会出现 – 12.345678,有时不会有点 – 123456789,有时还会混合字母和/或字母和数字 – ABCDEFGHI或A12D34G56。

在任何情况下,该字段都必须是9个字符或更less。 但Excel通过一个“有用”的前导零为任何ProductNumber开始一个点(十进制) – 所以我有0.12345678,把它变成一个10个字符的ProductNumber。 我需要修剪前导零 – 只有在字段以“0”开始的情况下。 有很多产品编号以“10.”,“20”开头。 等不想碰那些。

那么,有没有办法让我用标量variables来做这件事?

所以,说我的文件

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”开始的情况下。

你可以使用正则expression式来replace前面的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\././; 

让我稍微解释一下正则expression式

 ^ - Match the start of the string \s* - Match zero or more spaces 0\. - Match the number zero followed by a dot character