我有一个程序可以在
形式的文本段落中打印出逗号的位置
例如,如果段落是
one,two,three
three and a half
four,five
six
seven,eight
程序将打印
0:4
0:8
2:5
4:6
我想使用此输出创建一个数组,其中冒号后面的数字列在冒号前面的索引指定的行中。由上面坐标形成的数组将是
4 8
<blank or character '.'>
5
<blank or character '.'>
6
so array [0,0] = 4,array [0,1] = 8 array [1,0] =空 array [2,0] = 5 等...
我敢打赌这很简单,但我需要帮助才能写出来。
$data_file="file.out";
open(DAT, $data_file) || die("Could not open file!");
@raw_data=<DAT>;
close(DAT);
my %array;
my $line = 0;
foreach $newline(@raw_data) {
chomp;
while ( $newline=~m/(,|;|:|and)/) {
push @{ $array{$line} }, pos($newline); # autovivification
}
$line++; }
答案 0 :(得分:2)
#!/usr/bin/env perl
use strict;
use warnings;
my %array;
my $line = 0;
while (<DATA>) {
chomp;
while ( /(,|;|:|(?:and))/g ) {
my $position = pos() - length($1) + 1;
push @{ $array{$line} }, $position; # autovivification
}
$line++;
}
for ( sort { $a <=> $b } keys %array ) {
my $flattened_value = join ', ', @{ $array{$_} };
print "$_ -> $flattened_value\n";
}
__DATA__
one,two,three
three and a half
four,five
six
seven,eight
0 -> 4, 8
1 -> 7
2 -> 5
4 -> 6
参阅:chomp
,join
,keys
,sort
,split
。
请参阅以下文档以了解Perl的数据结构,尤其是本示例中使用的 autovivification 。