Xpoint
   [напомнить пароль]

Из массива по строкам в массив по столбцам

Метки: [без меток]
[удл]
2013-12-23 01:45:20 [обр] Елена[досье]
Добрый день!
Подскажите, пожалуйста, как проще всего реализовать такую задачу: есть файл со строками, в котором значения разделены табом. Нужно создать массивы, в котором значения будут "по столбцам" - массив с первыми значениями, со вторыми и т.д. Условно, количество значений в строке заранее неизвестно, но невелико (от 3 до 10-12). Пробовала разбивать строку на массив и переносить по значению из строки в столбец, но образуется цикл в цикле, который не выдает на выходе нужный массив и не выдает ошибок (use strict и -w я использую)
спустя 51 минуту [обр] Евгений Седов aka KPbIC(38/176)[досье]
Покажите ваш код.
спустя 7 часов [обр] Елена[досье]
сообщение промодерировано
#!/usr/bin/perl -w
use strict;

my @strings;
open (FILE, '<', 'sample1.txt');
my $i = 0;
while (my $line1 = <FILE>){
   chomp $line1;
   $strings[$i] = $line1; #записываем файл по строкам в массив
   $i++;
}

my @header;
@header = split ('\t', $strings[0]); #в первой строке - заголовок таблицы, значения соответствуют кол-ву столбцов
my @row; 
my @columns;
my $n;
for ($n = 0; $n < @header; $n++){
    for ($i=0; $i < @strings; $i++){
        @row = split ('\t', $strings[$i]); #разбиваю строки по значениям
        $columns[$i] = $row[$n];           #переписываю значение из строки в колонку
    }
}
print "@columns"."\n";
спустя 7 минут [обр] Роман Чемисов(56/327)[досье]
Если я правильно понял:
use Data::Dumper;

my $result;

open my $fh, "<", "Source.txt" or die $!;
while ( my $line = readline($fh) ) {
    
    chomp $line;
    
    my @values = split /\t/, $line;
    
    while ( my ($index, $value) = each @values ) {
        
        push @{$result->{$index}}, $value;
    }
}
close $fh;

print Dumper $result;
спустя 1 час 8 минут [обр] Евгений Седов aka KPbIC(38/176)[досье]
сообщение промодерировано
Елена[досье] Что касается вашего оригинального кода, то вы пытаетесь в одномерный массив поместить двумерный. Каждый элемент массива @columns сам должен содержать массив значений (по одному для каждой строки), а вы каждый раз помещаете туда единичное, перезаписывая то, что было там раньше. Поэтому в итоге у вас в нем содержится последняя строка.
Powered by POEM™ Engine Copyright © 2002-2005