perl - поместить значение массива в массив - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу поместить значение $temp_arr[0] $temp_arr[1] $temp_arr[2] $temp_arr[3] $temp_arr[4] $temp_arr[5] $temp_arr[6] $temp_arr[7] $temp_arr[8] $temp_arr[9] $temp_arr[10] $temp_arr[11] $temp_arr[12] в массив splited_line, но я не знаю, как.

мой сценарий:

#!/usr/bin/perl use DBI; use Data::Dumper; use DBD::mysql; use POSIX;
#use strict; use warnings;

#"/mnt/toto/titi.log" or die $!;

open(FILE,"<titi.log"); print "file loaded \n"; my @lines=<FILE>; #tout les valeurs du fichier se trouve dans le tableau lines close(FILE);
#my @all_words; my @temp_arr;
#my @splited_line;

print "$lines[0]"; print "$lines[83000]";

foreach my $line(@lines) {

@temp_arr=split('\s',$line);

push(@temp_arr);

print "$temp_arr[0] $temp_arr[1] $temp_arr[2] $temp_arr[3] $temp_arr[4] $temp_arr[5] $temp_arr[6] $temp_arr[7] $temp_arr[8] $temp_arr[9] $temp_arr[10] $temp_arr[11] $temp_arr[12]\n";

@splited_line = "$temp_arr[0] $temp_arr[1] $temp_arr[2] $temp_arr[3] $temp_arr[4] $temp_arr[5] $temp_arr[6] $temp_arr[7] $temp_arr[8] $temp_arr[9] $temp_arr[10] $temp_arr[11] $temp_arr[12]\n"; #this line don't work

print $splited_line[2]; 

}

Я хочу получить результат как$ splited_line [2], спасибо за любую информацию.

update

Я делаю это:

foreach my $line(@lines) {

@temp_arr=split('\s',$line);

push(@temp_arr);

#print "$temp_arr[0] $temp_arr[1] $temp_arr[2] $temp_arr[3] $temp_arr[4] $temp_arr[5] $temp_arr[6] $temp_arr[7] $temp_arr[8] $temp_arr[9] $temp_arr[10] $temp_arr[11] $temp_arr[12]\n";

@splited_line = "$temp_arr[0] $temp_arr[1] $temp_arr[2] $temp_arr[3] $temp_arr[4] $temp_arr[5] $temp_arr[6] $temp_arr[7] $temp_arr[8] $temp_arr[9] $temp_arr[10] $temp_arr[11] $temp_arr[12]\n";


push(@splited_line);

print $splited_line[2];
}

Вывод:

Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.
Use of uninitialized value in print at test7.pl line 35.

Донне знаю почему

1 Ответ

0 голосов
/ 30 ноября 2018

Ваш код выглядит довольно странно.

#!/usr/bin/perl use DBI; use Data::Dumper; use DBD::mysql; use POSIX;

Не похоже, что все должно быть в одной строке.

#use strict; use warnings;

Комментировать эти комментарии - очень плохая идея!

foreach my $line(@lines) {

    @temp_arr=split('\s',$line);

    push(@temp_arr);

Я не уверен, что вы думаете, что вы делаете здесь?push() принимает (как минимум) два аргумента - массив (который у вас есть) и некоторые элементы для добавления в массив (который вы пропустили).Без второго аргумента push() ничего не делает.

    #print "$temp_arr[0] $temp_arr[1] $temp_arr[2] $temp_arr[3] $temp_arr[4] $temp_arr[5] $temp_arr[6] $temp_arr[7] $temp_arr[8] $temp_arr[9] $temp_arr[10] $temp_arr[11] $temp_arr[12]\n";

Это выглядит как очень длинный способ написать print "@temp_arr\n": -)

    @splited_line = "$temp_arr[0] $temp_arr[1] $temp_arr[2] $temp_arr[3] $temp_arr[4] $temp_arr[5] $temp_arr[6] $temp_arr[7] $temp_arr[8] $temp_arr[9] $temp_arr[10] $temp_arr[11] $temp_arr[12]\n";

Хорошо, вот гдеты ошибаешься.Вы помещаете все элементы @temp_arr в строку, а затем присваиваете эту (единственную) строку @splited_line.Это оставляет @splited_line с одним элементом - содержащим вашу строку.То, что вы, вероятно, хотите, это просто @splited_line = @temp_arr.

    push(@splited_line);

Еще один бессмысленный push().Почему вы добавляете их в свой код?

    print $splited_line[2];

Поскольку @splited_line содержит только один элемент, $splited_line[2] будет содержать undef.

}

Я думаю, что выхочу что-то вроде этого:

#!/usr/bin/perl

# strict and warnings before all other code
use strict;
use warnings;

use DBI;
use Data::Dumper;
# You don't usually need to load DBD modules
use DBD::mysql;
use POSIX;

# 3-arg open() and lexical filehandle
# Check return from open().
open(my fh, '<', 'titi.log') or die "Cannot open file: $!\n";
print "file loaded \n";

# Do you really need to read the whole file in here?
my @lines = <$fh>; #tout les valeurs du fichier se trouve dans le tableau lines 
close($fh);

# No need to quote this values.
print $lines[0];
print $lines[83000];

foreach (@lines) {
    # By default, split() splits $_ on whitespace
    my @temp_arr = split;

    print "@temp_arr\n";

    my @splited_line = @temp_arr;

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