我做了这个功能来修改我的csv文件:
sub convert
{
# open the output/input file
my $file = $firstname."_lastname_".$age.".csv";
$file =~ /(.+\/)(.+\.csv)/;
my $file_simple = $2;
open my $in, '<', $file or die "can not read the file: $file $!";
open my $out, '>', $outPut."_lastname.csv" or die "can not open the o file: $!";
$_ = <$in>;
# first line
print $out "X,Y,Z,W\n";
while( <$in> )
{
if(/(-?\d+),(-?\d+),(-?\d+),(-?\d+),(-?\d+)/)
{
my $tmp = ($4.$5);
print $out $2.$sep.$3.$sep.$4.$sep.($5/10)."\n";
}
else
{print $out "Error: ".$_;}
}
close $out;
}
我想跳过前3000行,我不知道这样做,这是我第一次使用perl。
谢谢。
答案 0 :(得分:1)
由于您希望跳过前3000行,只需与current line number variable next if
一起使用$.
:
use strict; use warnings;
my $skip_lines = 3001;
open(my $fh, '<', 'data.dat') or die $!;
while (<$fh>) {
next if $. < $skip_lines;
//process the file
}
close($fh);
由于$.
检查当前行号,因此该程序只是告诉perl从第3001行开始,有效地跳过3000行。根据需要。
$。访问的最后一个文件句柄的当前行号。每 Perl中的文件句柄计算已读取的行数 它。 (根据$ /的值,Perl关于什么构成的概念 line可能与你的不匹配。)从文件句柄读取一行(通过 readline()或&lt;&gt; ),或当调用tell()或seek()时,$。 成为该文件句柄的行计数器的别名。您可以 通过分配$来调整计数器。 ,但这实际上不会 移动搜索指针。本地化$。不会本地化 文件句柄的行数。相反,它将本地化perl的概念 哪个文件处理$。目前是别名的。 $。当重置时重置 filehandle已关闭,但在重新打开文件句柄时则不会 没有干预关闭()。有关更多详细信息,请参阅中的I / O操作符 perlop得到。因为&lt;&gt;从来没有明确的关闭,行数增加 跨越ARGV文件(但请参阅eof中的示例)。你也可以使用 HANDLE-&gt; input_line_number(EXPR)访问给定的行计数器 文件句柄,无需担心你的句柄 访问。助记符:许多程序使用“。”表示当前行 号。
参考: