Как прочитать файл .txt и сохранить его в массив - PullRequest
0 голосов
/ 23 февраля 2019

Я знаю, что это довольно простой вопрос, но я не могу понять, как хранить все значения в моем массиве так, как я хочу.Вот небольшая часть того, как выглядит файл .txt:

0 A R N D
A 2 -2 0 0
R -2 6 0 -1
N 0 0 2 2
D 0 -1 2 4

Каждое значение разделяется двумя пробелами - если следующее значение положительно - или пробелом и '-' - если следующийзначение отрицательное

Вот код:

use strict;
use warnings;

open my $infile, '<', 'PAM250.txt' or die $!;
my $line;
my @array;

while($line = <$infile>) 
{
    $line =~ /^$/ and die "Blank line detected at $.\n";
    $line =~ /^#/ and next; #skips the commented lines at the beginning
    @array = $line;
    print "@array"; #Prints the array after each line is read
};

print "\n\n@array"; #only prints the last line of the array ?

Я понимаю, что @array содержит только последнюю строку, которая была ему передана.Есть ли способ получить @array для хранения всех строк?

Ответы [ 4 ]

0 голосов
/ 26 февраля 2019

Вам неясно, чего вы хотите достичь.

Является ли каждая строка элементом вашего массива?

Является ли каждая строка массивом в вашем массиве, а ваши "слова" являютсяэлементы этого массива?

В любом случае.

Вот как вы можете достичь обоих:

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

# Read all lines into your array, after removing the \n
my @array= map { chomp; $_ } <>;

# show it
print Dumper \@array;

# Make each line an array so that you have an array of arrays
$_= [ split ] foreach @array;

# show it
print Dumper \@array;
0 голосов
/ 23 февраля 2019

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

open my $infile, '<', 'PAM250.txt' or die $!;
my @array = <$infile>;
close $infile;

Если вы собираетесь читать очень большой файлтогда лучше читать его построчно, как вы делаете, но используйте PUSH , чтобы добавить каждую строку в конец массива.

push(@array,$line);

Я предлагаю вам также прочитать о некоторых другихмассив манипулирующих функций в perl

0 голосов
/ 24 февраля 2019
try this...


sub room
{
   my $result = "";
   open(FILE, <$_[0]);
   while (<FILE>) { $return .= $_; }
   close(FILE);
   return $result;
}

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

my @array = & room ('/ etc / passwd');

комната печати ('/ etc / passwd');

Вы можете сократить, переименовать, как считает ваше удобство.

шутящим уткам поблизости: таким образом толчок был заменен упрощением.текстовый файл содержит разрывы строк.традиционный толчок удаляет разрыв строки и подталкивает только линию вверх.конструкция массива представляет собой простую строку с переносами строк.Теперь содержите степлер ...

0 голосов
/ 23 февраля 2019

Вы ищете push .

push @array, $line;

Вы, несомненно, хотите поставить перед этим chomp, чтобы сначала перехватывать любые новые строки.

...