2014-10-02 3 views
1

У меня есть текстовый файл FILE1.TXT формата, как показано нижеНужна помощь Разбора текстового файла в Perl

1 
A: 24 
B: 6 
C: -33 

2 
A: 44 
B: 5 
C: 78 

3 
A: 32 
B: -98 
C: 22 

мне нужна моя перл программа для разбора этого текстового файла и вывода в file2.txt:

 1  2  3 
A 24  6  -33  
B 44  5  78 
C 32 -98  22 

Спасибо за помощь заранее

пытались что-то, но это не работает должным образом. Но, основываясь на отзывах других, я опубликовал код.

# Program to parse output 
@split1 = split(/\//,$ENV{'DESIGN_PATH'}); 

open (FILE1,"<path_to_file1.txt"); 
open (FILE2,">path_to_file2.txt"); 
my $go = 0; 

while ($line = <FILE1>) { 
print $line; 
# Remove Blank SPaces 
chomp $line; 
@sp = split(/ /,$line); 

$n=0; 
for ($i=0; $i<=$#sp; $i++) { 
    if ($sp[$i] eq "") { 
    } else { 
    $arry[$n] = $sp[$i]; 
    $n++; 
    } 
} 

if ($line =~ /A:/ && $go == 0) { 
    $go = 1; 
    $group = $arry[$n-1]; 
    print FILE2 "- -\n"; 
    print FILE2 "B $arry[$n-1]\n"; 
} 

if ($line =~ /B:/ && $go == 1) { 
    $go = 0; 
    print FILE2 "B: $arry[$n-1]\n"; 
} elsif ($line =~ /C:/ && $go == 1) { 
    print FILE2 "C: $arry[$n-1]\n"; 
} 


} 
close FILE1; 
+1

Что вы пробовали? –

+0

Мы не можем помочь вам исправить ваш код, если вы его не покажете. Добавьте код Perl, который не работает на ваш вопрос. – Borodin

+0

@AvinashRaj Я опубликовал фрагмент кода, который я пробовал и не работает – user2643899

ответ

2

Накапливать данные в Хох или какой-либо другой структуры данных, а затем вывести его:

use strict; 
use warnings; 

use List::MoreUtils qw(uniq); 

my %data; 

local $/ = ''; # Paragraph mode 
while (<DATA>) { 
    chomp; 
    my ($column, $vals) = split "\n", $_, 2; 

    while ($vals =~ m/(.*):\s*(.*)/g) { 
     $data{$column}{$1} = $2; 
    } 
} 

my @columns = sort keys %data; 
my @rows = sort +uniq map { keys %$_ } values %data; 

print join("\t", '', @columns), "\n"; 
for my $row (@rows) { 
    print join("\t", $row, map { $data{$_}{$row} // '' } @columns), "\n"; 
} 

__DATA__ 
1 
A: 24 
B: 6 
C: -33 

2 
A: 44 
B: 5 
C: 78 

3 
A: 32 
B: -98 
C: 22 

Выходы:

1 2 3 
A 24 44 32 
B 6 5 -98 
C -33 78 22 
+0

Он дает ошибку в этой строке 'use List :: MoreUtils qw (uniq);' – user2643899

+0

Что вы подразумеваете под HoH? – user2643899

+0

['List :: MoreUtils'] (https://metacpan.org/pod/List::MoreUtils) - это базовый модуль CPAN, который вы можете установить. [Как установить модули CPAN] (http://www.cpan.org/modules/INSTALL.html) – Miller

Смежные вопросы