我有一个充满数据的大量csv文件,我只需要提取保留逗号的是/否(1-16部分)并在完成循环后打破新行
以下是数据的快照
Firstname: xxx
Lastname: xxx
Email: xxx@xxx.net
Phone: xxxxxxxxxx
IP Address: xxx.xxx.xxx.xxx",,,,,,,,,,,,,,,,
xxxx,Suttle,OR,United States,xxxxxx@xxx.com,xxxxxxxxxx,xxxx xxxx,"UnkNo,wn",Long Form,New,23/xxxxx,xxx.xxx.xxx.xxx,4/17/2014 13:45,4/17/2014 13:45,S3S - Survival,xxxxxx.com,4/17/2014 0:00,4/17/2014 13:45,"
1. No,
2. No,
3. No,
4. No,
5. No,
6. No,
7. No,
8. No,
9. No,
10. No,
11. No,
12. No,
13. No,
14. No,
15. No,
16. Yes,
我尝试使用我能想到的每种方法提取上面的是/否数据,但我仍然无法正确提取!任何建议,欣喜地赞赏
所需的输出位于CSV文件中,如下所示 http://pastebin.com/LerQ9vE4
答案 0 :(得分:0)
open my $fin, "your.file";
my $str;
for (<$fin>) { # read line into $_ variable
if (/^\s*\d+\.\s*(\w+)/) { # extract word from $_
$str .= $1 . ","; # append word and comma to $str
}
}
print $str;
答案 1 :(得分:0)
这应该有效:
use strict;
use warnings;
use autodie;
open my $fh, "<", "csvfile";
open my $op, ">", "output.txt";
my $flag;
while(<$fh>) {
if ($_ =~ /\d+\.\s*(\w+,)/) {
print $op "\n" if ($flag eq "Y");
$flag = "N";
print $op "$1";
} else {
$flag = "Y";
}
}
while loop
一行读取。 ^\d+
.
\s*
。 (\w+,)
的捕获组捕获任何单词后跟,
。