2013-03-02 2 views
1

나는 다음과 같은 문제가 있습니다텍스트 파일에서 다차원 벡터를 만들기

을 나는처럼 보이는 파일이 : 나는 다른 벡터를 만들

1 2 4 5 7 8 
3 1 3 7 8 9 10 11 
2 4 1 3 5 
4 5 6 7 

을하는 :

vector[0][0]=1 , vector[0][1]=2, ... , vector[1][0]=3, vector[1][1]=1 etc etc 

저는 아직 시작 단계이며 시험해 보았습니다.

my $file = 'file.dat'; 
open (INFO, $file); 
my @vector = <INFO>; 
close (INFO); 

하지만 파일에 포함 된 내용을 읽는 배열을 만들고 파일의 요소와 정확히 일치하는 위치 (결과로 기대하는 것)를 부여하지는 않습니다.

답변

4

으로 반복 파일을 통해, 라인을 분리하고 메인 배열에 밀어 익명의 배열 안에 넣어 :

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

# Use the lines below for your real data 
#my $file = 'file.dat'; 
#open my $fh, "<", $file or die "Cannot open $file: $!"; 
my @vector; 
while (<DATA>) { # replace <DATA> with <$fh> 
    push @vector, [ split ]; 
} 
print Dumper \@vector; 

__DATA__ 
1 2 4 5 7 8 
3 1 3 7 8 9 10 11 
2 4 1 3 5 
4 5 6 7 

는 출력 :

$VAR1 = [ 
      [ 
      '1', 
      '2', 
      '4', 
      '5', 
      '7', 
      '8' 
      ], 
      [ 
      '3', 
      '1', 
      '3', 
      '7', 
      '8', 
      '9', 
      '10', 
      '11' 
      ], 
      [ 
      '2', 
      '4', 
      '1', 
      '3', 
      '5' 
      ], 
      [ 
      '4', 
      '5', 
      '6', 
      '7' 
      ] 
     ]; 
+0

죄송하지만 어떻게 내가 데이터 파일을 열 수 있습니까? 파일 이름이'file.dat'라면 스크립트에서 어떻게이 파일에있는 데이터를 찾을 수 있을까요? –

+0

코드에서 이미 파일을 열었습니다. 이걸 몰랐 니? 너처럼 보이기 때문에. 3 개의 인자로 된 열린 파일과 어휘 파일 핸들을 사용해야한다. 또한 열린 명세서의 반환 값을 확인하십시오. – TLP

+0

정말로 고마워요. 작동합니다. –

2

당신은 그것을 아주 할 수있다 map과 정규 표현식을 사용하여 숫자 부분 문자열을 골라 내십시오. my @vector = map [ /\d+/g ], <FILEHANDLE>

이 프로그램은 데모를 용이하게하기 위해 DATA 파일 핸들을 읽습니다. 일반적으로 open my $fh, '<', 'myfile' or die $!을 사용하여 파일을 열고 해당 파일 핸들을 읽습니다.

Data::Dump은 데이터 구조를 표시하기위한 목적으로 만 사용되며 다른 경우에는 필요하지 않습니다.

use strict; 
use warnings; 
use 5.010; 

my @vector = map [ /\d+/g ], <DATA>; 

use Data::Dump; 
dd \@vector; 

say "\$vector[0][0] = $vector[0][0]"; 
say "\$vector[0][1] = $vector[0][1]"; 
say "\$vector[1][0] = $vector[1][0]"; 
say "\$vector[1][1] = $vector[1][1]"; 


__DATA__ 
1 2 4 5 7 8 
3 1 3 7 8 9 10 11 
2 4 1 3 5 
4 5 6 7 

출력

[ 
    [1, 2, 4, 5, 7, 8], 
    [3, 1, 3, 7 .. 11], 
    [2, 4, 1, 3, 5], 
    [4 .. 7], 
] 
$vector[0][0] = 1 
$vector[0][1] = 2 
$vector[1][0] = 3 
$vector[1][1] = 1 
관련 문제