Вопрос о многомерном массиве Perl - PullRequest
0 голосов
/ 12 февраля 2011

У меня есть программа, которая распечатывает расположение запятых в абзаце текста в виде

Например, если абзац

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

т. Массив [0,0] = 4, массив [0,1] = 8 массив [1,0] = пусто массив [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++; }

1 Ответ

2 голосов
/ 12 февраля 2011

Программа

#!/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 и особенно автовивификации , который использовался в этом примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...