Как проанализировать текст, который включает в себя что-то вроде таблицы, используя PERL - PullRequest
0 голосов
/ 22 июня 2011

Таблицы как это:

<p>
        Porpertity        History 
<p>
class    Rate              data
<p>
A1        5%                10
<p>
B1        3.5%              8

Как разобрать их в хеш или массив?

Большое спасибо.

1 Ответ

2 голосов
/ 22 июня 2011

Есть три способа разбора этой таблицы.Сначала нам нужно открыть его и добраться до данных.Я предполагаю, что если второй столбец оканчивается на %, это допустимый столбец:

#! /usr/bin/env perl

use strict;
use warnings;

open (MY_FILE, "data.txt")
   or die qq(Can't open "data.txt" for reading\n);

my %myHash;
my %dataHash;
my %rateHash;


while (my $line = <MY_FILE>) {
   my ($class, $rate, $data) = split (/\s+/, $line);
   next (unless $rate =~ /%$/);

Эта часть кода разделит три элемента, и тогда возникает вопрос, как структурироватьхэш.Мы могли бы создать два хэша (один для скорости и один для данных, и использовать один и тот же ключ:

   $rateHash{$class} = $rate;
   $dataHash{$data} = $data;

Или мы могли бы иметь наш хэш в качестве хэша, и поместить оба куска в один хеш:

   $myHash{$class}->{RATE} = $rate;
   $myHash{$class}->{DATA} = $data;

Теперь вы можете выбрать либо скорость, либо данные в одном хеше. Вы также можете сделать это за один раз:

   %{$myHash{$class}} = ("RATE" => $rate, "DATA" => "$data");

Я лично предпочитаю первый.

Другая возможность - объединить два в один скаляр:

   $myHash{$class} = "$rate:$data";   #Assuming ":" doesn't appear in either.

Я предпочитаю сделать его хэшем хэшей (как во втором примере). Затем создайте класссправиться с грязной работой (это просто сделать с помощью Moose).

Однако, в зависимости от ваших навыков программирования, вам может быть удобнее использовать идею двойного хеширования или объединение двух значений в один хеш.

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