2011-02-01 4 views
0

그래서 내가 (긴 20mbs 등) 등의 내용으로 큰 txt 파일메이플 (Maple) : 그런 CSV (쉼표로 구분 된 값) 문서를 구문 분석하는 방법은 무엇입니까?

나는 그 문서 매트릭스의 8x8의 배열과 행렬의 배열 나가야 할
20 30 40 550 60 70 80 91 
20 30 40 50 60 70 80 92 
20 30 40 50 60 70 80 93 
20 30 40 50 64 70 80 90 
20 30 40 50 60 70 80 90 
20 30 40 50 60 70 80 90 
20 30 40 40 60 70 80 90 
40 30 40 50 60 70 80 90 

4 5 6 6 

20 30 40 50 60 70 80 91 
20 30 40 50 60 70 80 92 
20 30 40 50 60 70 80 93 
2 30 40 50 64 70 80 90 
20 30 20 50 60 70 80 90 
20 30 40 50 60 70 80 90 
20 30 40 40 60 70 80 90 
40 30 40 50 60 70 80 90 

4 5 1 6 

20 30 40 50 60 70 80 91 
20 30 40 50 60 70 80 92 
20 30 40 50 60 70 80 93 
20 30 40 50 64 70 80 90 
20 30 40 50 60 70 80 90 
20 30 40 50 60 70 80 90 
20 1 40 40 60 70 80 90 
40 30 40 50 60 70 80 90 

4 5 6 1 

1 * 4 같은 것은 가능하며이 그것을하는 방법?

+0

주어진 데이터는 쉼표가 아닌 공백으로 구분됩니다. – acer

답변

1

다음은 8x8 행렬의 테이블 M과 1x4 행 벡터의 테이블 V를 생성합니다.

M과 V를 앞에 n 크기의 배열로 선택적으로 만들 수 있습니다. 이 줄들의 주석을 제거하십시오. 100 개의 매트릭스 - 벡터 쌍의 스캔을 위해 하드 코딩되어 있음을 알 수 있습니다. 원하는대로 늘리십시오. fscanf 실패를 감지하고 루프에서 벗어남으로써 다음 항목을 스캔하지 못하면 어쨌든 중지됩니다.

예제에서는 Matrix와 Vector의 세 쌍만 포함 된 일반 텍스트 데이터 파일을 사용했으며 네 번째 스캔 시도가 실패 할 때 휴식을 취했습니다.

restart: 
Z:="C://TEMP//mydata.txt": 

fclose(Z); 

#M:=Array(1..100): 
#V:=Array(1..100): 

for i from 1 to 100 do 
    try 
     M[i]:=fscanf(Z,"%{8,8}ldm")[1]; 
     V[i]:=fscanf(Z,"%{4}ldr")[1]; 
    catch "end of input encountered": 
     break; 
    end try; 
end do; 

M[2]; # returns the 2nd entry (a 8x8 Matrix) of M 
V[2]; # returns the 2nd entry (a 1x4 row Vector) of V 
관련 문제