0

这一定是个基本问题,但我找不到满意的答案。我这里有一个脚本,用于将 CSV 格式的数据转换为 TSV。我以前从未使用过 Perl,但我需要知道如何保存在 Perl 脚本运行后打印的数据。

下面的脚本:

#!/usr/bin/perl

use warnings;
use strict;

my $filename = data.csv;
open FILE, $filename or die "can't open $filename: $!";
while (<FILE>) {
s/"//g;
s/,/\t/g;
s/Begin\.Time\.\.s\./Begin Time (s)/;
s/End\.Time\.\.s\./End Time (s)/;
s/Low\.Freq\.\.Hz\./Low Freq (Hz)/;
s/High\.Freq\.\.Hz\./High Freq (Hz)/;
s/Begin\.File/Begin File/;
s/File\.Offset\.\.s\./File Offset (s)/;
s/Random.Number/Random Number/;
s/Random.Percent/Random Percent/;
print;
}

所有被分析的数据都在 cmd 提示符下。如何保存这些数据?

编辑: 谢谢大家!它工作得很好!

4

2 回答 2

1

从您的 cmd 提示符:

perl yourscript.pl > C:\result.txt

在这里,您运行 perl 脚本并将输出重定向到名为 result.txt 的文件

于 2013-07-26T14:52:50.353 回答
0

将 CSV 文件中的所有逗号都视为字段分隔符总是有潜在危险的。CSV 文件还可以包含嵌入在数据中的逗号。这是一个例子。

1,"Some data","Some more data"
2,"Another record","A field with, an embedded comma"

在您的代码中,该行将s/,/\t/g所有选项卡视为相同,并且最终字段中的嵌入逗号也将扩展为一个选项卡。这可能不是你想要的。

这是一些使用 Text::ParseWords 正确执行此操作的代码。

#!/usr/bin/perl

use strict;
use warnings;

use Text::ParseWords;

while (<>) {
  my @line = parse_line(',', 0, $_);
  $_ = join "\t", @line;

  # All your s/.../.../ lines here

  print;
}

如果你运行它,你会看到最后一个字段中的逗号没有更新。

于 2013-07-26T16:22:54.677 回答