分隔我有一个看起来像提取的记录特定多行被管在Perl
NAME|JOHN|TOKYO|JPN AGE|32|M INFO|SINGLE|PROFESSIONAL|IT NAME|MARK|MANILA|PH AGE|37|M INFO|MARRIED|PROFESSIONAL|BPO NAME|SAMANTHA|SYDNEY|AUS AGE|37|F INFO|MARRIED|PROFESSIONAL|OFFSHORE NAME|LUKE|TOKYO|JPN AGE|27|M INFO|SINGLE|PROFESSIONAL|IT
我想国家的记录分开的文件。我已存储的每一行到数组变量@fields
my @fields = split(/\|/, $_);
使得$fields[3]
作为我的用于分选它的基础。我想它分成2个输出文本文件
输出文本文件1:
NAME|JOHN|TOKYO|JPN
AGE|32|M
INFO|SINGLE|PROFESSIONAL|IT
NAME|LUKE|TOKYO|JPN
AGE|27|M
INFO|SINGLE|PROFESSIONAL|IT
输出文本文件2
NAME|MARK|MANILA|PH
AGE|37|M
INFO|MARRIED|PROFESSIONAL|BPO
NAME|SAMANTHA|SYDNEY|AUS
AGE|37|F
INFO|MARRIED|PROFESSIONAL|OFFSHORE
把所有从JPN输出文本1 &非JPN国家输出文本文件2
这里的代码是什么试图解决
use strict;
use warnings;
use Data::Dumper;
use Carp qw(croak);
my @fields;
my $tmp_var;
my $count;
;
my ($line, $i);
my $filename = 'data.txt';
open(my $input_fh, '<', $filename) or croak "Can't open $filename: $!";
open(OUTPUTA, ">", 'JPN.txt') or die "wsl_reformat.pl: could not open $ARGV[0]";
open(OUTPUTB, ">", 'Non-JPN.txt') or die "wsl_reformat.pl: could not open $ARGV[0]";
my $fh;
while (<$input_fh>) {
chomp;
my @fields = split /\|/;
if ($fields[0] eq 'NAME') {
for ($i=1; $i < @fields; $i++) {
if ($fields[3] eq 'JPN') {
$fh = $_;
print OUTPUTA $fh;
}
else {
$fh = $_;
print OUTPUTB $fh;
}
}
}
}
close(OUTPUTA);
close(OUTPUTB)
仍然没有运气就可以了:(
对不起,我还需要15次我就可以投票前。 – Soncire 2013-03-21 00:06:17