【发布时间】:2011-09-14 14:03:05
【问题描述】:
我有一个简单的 .csv 文件,我想从写入新文件中提取数据。
我要编写一个读取文件的脚本,读取每一行,然后以不同的顺序拆分和构造列,如果 .csv 中的行包含“xxx” - 不要将该行输出到输出文件。
我已经设法读入一个文件,并创建了一个辅助文件,但是我是 Perl 的新手,并且仍在尝试制定命令,以下是我编写的用于掌握 Perl 并想知道的测试脚本如果我能把它改成我需要的?-
open (FILE, "c1.csv") || die "couldn't open the file!";
open (F1, ">c2.csv") || die "couldn't open the file!";
#print "start\n";
sub trim($);
sub trim($)
{
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}
$a = 0;
$b = 0;
while ($line=<FILE>)
{
chop($line);
if ($line =~ /xxx/)
{
$addr = $line;
$post = substr($line, length($line)-18,8);
}
$a = $a + 1;
}
print $b;
print " end\n";
非常感谢任何帮助。
【问题讨论】:
-
我想我会给你一些风格指针,希望你不介意。 0. 将
use strict;和use warnings;放在所有脚本的顶部。您必须使用my声明变量,但从长远来看,它会节省您的调试时间——例如my $foo = bar();1. 在 perl 中,无需预先声明您的子例程——在十多年的大量 Perl 使用中,我从来没有需要这个功能。 2. 一般来说,不要在你的潜艇上使用原型,它们不像在其他语言中那样工作。它们只是编译器提示,可以轻松绕过。 -
更多样式指针。 3.变量
$a和$b是sort使用的特殊变量。最好不要在其他任何地方使用它们。如果您确保它们是词法范围的,那可能是安全的,但是,一般来说,我会避免使用它们。 4.像FILE这样的文件句柄是全局变量,最好用词法句柄代替。 5. Open 有 3 参数形式和 2 参数形式。保留 2 参数版本是为了向后兼容,但它有一些问题。请改用 3 arg 形式。现代 3-arg 词法打开示例:open my $fh, '>', $path_to_some_file or die "Didn't work: $!\n";. -
您的代码中的大多数问题都是过时或令人困惑的文档问题。幸运的是,有更多当前 Perl 使用的来源可用。 brian d foy 的 Effective Perl Programming 和 chromatic 的 Modern Perl 是几本优秀的书籍。 Modern Perl 甚至可以免费下载:onyxneon.com/books/modern_perl/index.html