Как прочитать данные в файл, который файл внутри файла в perl? - PullRequest
1 голос
/ 18 февраля 2020

У меня есть файл list2.txt, и внутри этого файла есть несколько файлов, таких как 02x5.txt или 0.3x5.txt et c. Тогда как читать данные внутри файла 02x5.txt за один раз? Внутри 02x5.txt есть height:20, length:5, colour:blue et c.

inside list2.txt:
02x5.txt
03x5.txt


inside 02x5.txt:
height:20, 
length:5, 
colour:blue

inside 03x5.txt:
height:25, 
length:10, 
colour:green
#!/usr/bin/perl
    use strict;
    use warnings;

# Reading a line from a file (or rather from a filehandle)
my $filename = "list2.txt";
    if (open my $data, "<", $filename) {
    while (my $row = <$data>) {
        chomp $row;
        if ($row =~ m/02x5.txt$/ ){
        my $m = $row;
            print "$m\n";
        }
    }
    }

Как я могу прочитать данные о высоте и длине из определенного текстового файла? Спасибо

Ответы [ 2 ]

2 голосов
/ 18 февраля 2020

Пожалуйста, посмотрите следующий фрагмент кода, который выполняет описанные вами задачи, прочитайте данные, хранящиеся в га sh %data, которые вы можете использовать в любом случае.

use strict;
use warnings;
use feature 'say';

use Data::Dumper;

my $debug = 1;

my $filename = 'list2.txt';

my %data;

open my $fh, '<', $filename
    or die "Couldn't open $filename";

my @filenames = <$fh>;

close $fh;

chomp @filenames;

foreach $filename(@filenames) {
    open $fh, '<', $filename
        or die "Couldn't open $filename";

    while( <$fh> ) {
        chomp;
        my($k,$v) = split ':';
        $data{$filename}{$k} = $v;
    }

    close $fh;
}

say Dumper(\%data);

Вывод

$VAR1 = {
          '02x5.txt' => {
                          'colour' => 'blue',
                          'height' => '20, ',
                          'length' => '5, '
                        },
          '03x5.txt' => {
                          'length' => '10, ',
                          'colour' => 'green',
                          'height' => '25, '
                        }
        };
0 голосов
/ 18 февраля 2020

Ответ всегда состоит в том, чтобы разбить проблему на более мелкие куски.

#!/usr/bin/perl

use strict;
use warnings;

my @files = get_list_of_files();

my %data;

foreach my $file (@files) {
  my $file_data = get_data_from_file($file);

  $data{$file} = $file_data;
}

# You now have your data in a hash called %data.
# Do whatever you want with it.

sub get_list_of_files {
  open my $list_fh, '<', 'list2.txt'
    or die $!;

  my @files = <$list_fh>;
  chomp(@files);

  return @files;
}

sub get_data_from_file {
  my ($filename) = @_;

  my $record;

  open my $fh, '<', $filename or die $!;

  while (<$fh>) {
    chomp;
    # Remove trailing comma
    s/,$//;
    my ($key, $value) = split /:/;
    $record->{$key} = $value;
  }

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