2009-07-08 3 views
1

숫자 및 텍스트 데이터 유형이 혼합 된 거대한 CSV 파일이 있습니다. 이걸 Matlab의 단일 행렬로 읽고 싶습니다. 내 문제를 설명하기 위해 여기에 간단한 예제를 사용하겠습니다.MATLAB으로 텍스트 필드를 읽고 단일 행렬을 만드는 방법

A=fopen('filename.csv'); 
B=textscan(A,'%d %d', 'delimiter',','); 
C=cell2mat(B); 

는 처음 두 줄은 잘 작동하지만, 문제는이 texscan 생성하지 않는다는 것입니다 : 내가 사용 매트랩에이 글을 읽을하려고

1,foo 
2,bar 

:의 나는이 CSV 파일이 있다고 가정 해 봅시다 2x2 매트릭스; 대신 각 값이 배열 인 1x2 행렬을 만듭니다. 그래서 마지막 줄을 사용하여 배열을 하나의 큰 행렬로 결합하려고 시도하지만 배열에 다른 데이터 유형이 있기 때문에 오류가 발생합니다.

이 문제를 해결할 수있는 방법이 있습니까? 또는 배열을 결합하는 더 좋은 방법은?

답변

4

나는 그 (것)들을 결합하는 것이 좋은 아이디어다는 것을주의한다. 그것들을 분리하는 것이 더 나을 것입니다. 결과

K >> B {1}

ANS =

 1 
     2 

보면

clear 
clc 
A=fopen('filename.csv'); 
B=textscan(A,'%d %s', 'delimiter',',') 
fclose(A) 

: 그것은 더 잘 작동하도록

나는, 당신의 코드를 변경 K >> B {2}

ans =

'foo' 
'bar' 

정말이 형식이 가장 유용하다고 생각합니다. 대부분의 사람들은이 셀 배열을 작은 덩어리로 나누기를 원할 것입니다.

num = B{1} 
txt = B{2} 

왜 그들을 결합하려고합니까? 그들은 이미 세포 배열에 함께 있으며, 그것은 당신이 얻을 수있는 가장 결합 된 것입니다.

+0

OLS 회귀 분석에서 종속 변수 역할을하는 행렬을 만들기 위해 이들을 결합했습니다.더미 변수 (예 : "true"또는 "false"라고하는 필드가 1 또는 0으로 변환 됨)로 변환되어야하는 여러 텍스트 필드가 있습니다. 필자는 텍스트를 매트릭스에 집어 넣은 다음 필요에 따라 필드를 변환하려고했습니다. 그러나 당신의 제안을 기반으로, 여전히 배열에있는 동안 물건을 변환 한 다음 결합하는 것이 더 좋은가? 모든 것이 변환 된 후에, cell2mat를 결합하는 것이 바람직합니까? 감사합니다. Doug! – Jack7890

+1

당신은 구조에서 이러한 유지 할 수 있습니다 : data.num = NUM ​​ data.txt로 = 이 txt를이 하나 개의 용기에 보관하고, 좀 더 직관적 인 이름으로 그들에게 참조 할 수있게된다. 그것들을 하나의 셀 배열에 넣으면 구문을 조합하고 결합하는 것 외에 다른 이점을 사용하지 않고 구문을 읽고 조작 할 수 있습니다. 나는 구조와 함께 갈 것이다. – MatlabDoug

+0

@ Jack7890 : * 실제로 * 개별 배열을 행렬에 결합하려는 경우 먼저 모든 배열 내용을 동일한 데이터 유형으로 변환해야합니다. 예를 들어, 배열 [ 'foo'; 'bar']가 B {2}에 저장되면 [3; 4]. 배열을 가로로 연결하여 [1 3; 2 4], 다음을 수행하십시오. C = [B {:}]; 배열을 수직으로 연결하여 [1; 2; 삼; 4] 대신 다음과 같이하십시오 : C = vertcat (B {:}); – gnovice

-1

나는이 목적으로 textscan을 사용할 수 없다고 생각합니다. 항상 fscanf를 사용하면 항상 지정된 행렬을 얻을 수 있습니다. 그러나 데이터의 레이아웃을 모르는 경우에는 다소 까다 롭습니다. 다음과 같이 작동 fscanf

:

fscanf(fid, format, size) 
FID는 fopen을

형식에 의해 생성 된 FID입니다

파일 형식 & 당신이 데이터를 읽는 방법 ([ '% d 개' ',' '% s']은 예제 파일에서 작동합니다.

크기는 매트릭스 크기입니다 ([2 2]는 예제 파일에서 작동합니다).

0

자연적인 해결책이 있지만 통계 도구 상자 (버전 6.0 이상)가 필요합니다. 혼합 된 데이터 유형은 데이터 세트 배열로 읽을 수 있습니다. Mathworks 도움말 페이지 here을 참조하십시오.

관련 문제