【发布时间】:2016-07-25 16:45:19
【问题描述】:
我需要打开一个非常混乱的 csv 文件(我所说的混乱是指数据之间的空白列和行,我只需要来自某些列的数据)并且只有在到达给定行时才开始将数据分配给列单词“Information A”或“Informasie A”(文件使用两种不同语言中的一种,但格式相同)。该表的格式大致如下:
(n) Name
(n) General info
(n) ID
(n) Contact
(n) General
(n)
(a) Information A
(a)
(a) Name
(a) one
(a) two
(a) three
(a)
(a) four
(a) five
(a) Total
(b) Information B
(b)
(b) Name
程序的基本大纲是为我编写的,它最初在额外细节的第一部分由 $part='n' 指定(如上面的 (n) 所示),而在“信息 A”之后被指定为“a”等等。但是,我想我可能已经删除了一些使整个提取无法使用的代码。我尝试修复它,但这样做弊大于利,因此我尝试从头开始修复它,并希望在此过程中学习一种更简单的方法。
我目前的代码如下:
open (IN_F, "$file") or die "Can't open $file";
my %file;
while (<IN_F>){
my $line = $_;
$line =~ s/\s*$//g;
$line =~ s/\-//g;
my $part='n';
$part='a' if (substr($line,0,13) eq 'Information A');
$part='b' if (substr($line,0,13) eq 'Information B');
next if $part='a';
last if substr($line,0,20) eq 'Litter Information B';
print "$line\n";
}
exit;
我想要打印的位置:
Name
one
two
three
four
five
Total
我发现类似的问题有不同的解决方案;其中一些使用了行号,但我的不是恒定的。使用了不同的解决方案“..”,我尝试过,但我认为我没有正确应用它。
任何帮助将不胜感激!
【问题讨论】:
标签: perl loops csv if-statement next