Использование perl для обработки списка имен и деталей - PullRequest
0 голосов
/ 09 мая 2019

Есть два файла.один файл - это список имен.другой файл - это список имен и деталей.Я хочу создать 3-й файл, который содержит имена из 1-го файла и детали (с этим именем) из 2-го файла.Можете ли вы предложить.

Детали из 2-го файла ограничены шаблоном "list [i]" (которые являются именами из 1-го файла) и ""

#!/usr/intel/bin/perl


use warnings;
use strict;
use Data::Dumper;



my $handle;
unless (open $handle, "<:encoding(utf8)", "/nfs/fm/disks/fm_nvm_7138/WLRD_LOGIC_users/cgoudarx/willard_b02/chiplevel/verif/testsuites/upf/pss_ret_regs.txt") {
   print STDERR "Could not open file '/nfs/fm/disks/fm_nvm_7138/WLRD_LOGIC_users/cgoudarx/willard_b02/chiplevel/verif/testsuites/upf/pss_ret_regs.txt': $!\n";
   # we return 'undefined', we could also 'die' or 'croak'
   return undef
}
chomp(my @list = <$handle>);
unless (close $handle) {
   # what does it mean if close yields an error and you are just reading?
   print STDERR "Don't care error while closing '/nfs/fm/disks/fm_nvm_7138/WLRD_LOGIC_users/cgoudarx/willard_b02/chiplevel/verif/testsuites/upf/pss_ret_regs.txt': $!\n";
} 

open ( INPUT, "/nfs/fm/disks/fm_nvm_7138/WLRD_LOGIC_users/cgoudarx/willard_b02/chiplevel/verif/testsuites/upf/tet.xml" ) or die("Could not open xml file.");

my $outffile ="newlist.xml";
open(FILEOUT2, ">$outffile") || die "ERROR: Can't open the output file $outffile: $!";

my $size = @list;

for (my $i=0; $i < $size; $i++) {
    while( my $line = <INPUT> )
    {

        if ( $line =~ m/$list[$i]/) {
            print FILEOUT2 $line;
            while( $line = <INPUT>) # print till empty line
            {
                last if ( $line =~ m/<\/reg>/);
                print FILEOUT2 $line;
            }
            print FILEOUT2 $line;
        };
    };
};

close(INPUT);

1 Ответ

0 голосов
/ 13 мая 2019

Один из ваших входных файлов - это документ XML. Вы не должны анализировать XML-документы с помощью регулярных выражений. Намного лучше использовать правильный синтаксический анализатор XML (я бы порекомендовал XML :: LibXML ).

Если вы настаиваете на синтаксическом анализе XML с помощью регулярных выражений, то вы не можете обрабатывать входной файл по одной строке за раз, поскольку элементы XML часто (обычно?) Занимают несколько строк.

Также, пожалуйста, обновите ваш код обработки файлов, чтобы использовать трехаргументную версию open() и лексические дескрипторы файлов.

open ( my $in_fh, '<', "...") or die("Could not open xml file.");

И

open( my $out_fh, '>', $outffile) || die "ERROR: Can't open the output file $outffile: $!";

О, и это хорошая идея стандартизировать использование or или || в этих командах.

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