如何复制CSV文件,但跳过第一行?
我想编写一个采用CSV文件的脚本,删除其第一行并创建一个新的输出csv文件。如何复制CSV文件,但跳过第一行?
这是我的代码:
use Text::CSV_XS;
use strict;
use warnings;
my $csv = Text::CSV_XS->new({sep_char => ','});
my $file = $ARGV[0];
open(my $data, '<', $file) or die "Could not open '$file'\n";
my $csvout = Text::CSV_XS->new({binary => 1, eol => $/});
open my $OUTPUT, '>', "file.csv" or die "Can't able to open file.csv\n";
my $tmp = 0;
while (my $line = <$data>) {
# if ($tmp==0)
# {
# $tmp=1;
# next;
# }
chomp $line;
if ($csv->parse($line)) {
my @fields = $csv->fields();
$csvout->print($OUTPUT, \@fields);
} else {
warn "Line could not be parsed: $line\n";
}
}
在perl的命令行我写的:c:\test.pl csv.csv
,它不创造file.csv
输出,但是当我双击它脚本创建一个空白的CSV文件。我究竟做错了什么?
Yhm ..你不需要任何模块来完成这个任务,因为CSV(逗号分隔值)只是文本文件 - 只是打开文件,并迭代它的行(写入输出除特定数字之外的所有行,例如第一)。这样的任务(跳过第一行)非常简单,使用命令行而不是专用脚本可能会更好。
快速搜索 - 请参阅此链接的例子,大约有perl的输入/输出操作
http://learn.perl.org/examples/read_write_file.html
PS许多教程。 Perl脚本(程序)通常不会被“编译”成二进制文件 - 它们当然是“编译”的,但是,即时运行 - 这就是为什么/ usr/bin/perl被称为比“编译器”更像“解释器”的原因gcc或g ++。我想你要找的是一些带有语法高亮和其他开发工具的编辑器 - 你可能会用perl插件来尝试Eclipse(跨平台)。
http://www.eclipse.org/downloads/
http://www.epic-ide.org/download.php/
此
[email protected]:~$ cat blabla.csv | perl -ne 'print $_ if $x++; '
跳过第一行(打印出仅当变量递增后它每一次使用超过零)
你的程序ISN”理想情况下写入,但我不能说出为什么它不起作用,如果你通过命令行上的CSV文件,你h大家介绍。你会得到错误Could not open 'csv.csv'
或Can't able to open file.csv
?如果不是,则必须在当前目录中创建该文件。也许你正在寻找错误的地方?
如果您只需要放下第一行,则无需使用模块来处理CSV数据 - 您可以将其作为简单的文本文件处理。
如果在命令行中指定文件(如在c:\test.pl csv.csv
中),则可以使用<>
运算符显式打开文件而不必使用该文件进行读取。
只有在行计数器($.
变量)不等于1时,该程序才从输入文件中读取行并将其打印到输出中。
use strict;
use warnings;
open my $out, '>', 'file.csv' or die $!;
while (my $line = <>) {
print $out $line unless $. == 1;
}
你的bash的行可能不会对@ user1526112工作,因为他不幸似乎没有被使用unixoid系统。 'perl -ne'print $ _ if $ x ++;'' INFILE。csv'应该可以做到。我不太了解“cmd.exe”,但追加'> outfile.csv'可能会将输出放到您想要的位置。 – amon 2012-07-14 21:58:57