2016-06-29 2 views
0

원자 기호, X 위치, Y 위치, Z 위치라는 4 개의 열이 포함 된 Fortran 프로그램으로 작성된 파일을 가져 오려고합니다. 여기에 입력 파일의 예입니다 :문자 및 숫자를 사용하여 탭으로 구분 된 파일 가져 오기

Zn    0.00000000000  0.00000000000  0.00000000000 
Zn    0.00000000000  0.00000000000  0.25000000000 
Zn    0.00000000000  0.00000000000  0.50000000000 
Zn    0.00000000000  0.00000000000  0.75000000000 
Zn    0.00000000000  0.05000000000  0.00000000000 
Zn    0.00000000000  0.05000000000  0.25000000000 
Zn    0.00000000000  0.05000000000  0.50000000000 
Zn    0.00000000000  0.05000000000  0.75000000000 

을 지금, CSV 파일로 엑셀 및 수출이 가져온 다음 csvread (파일 이름)을 사용하는 경우 첫 번째 열은 문자 입력을 가지고 있기 때문에, 오류가, 상정 생산된다. (나는이 중간 단계없이 직접 탭으로 구분 된 파일을 가져올 수있는 방법이 있는지,하지만 난이 방법을 사용있었습니다.)

내가 시도한 것 : 첫 번째 열을 제거

  1. MATLAB으로 가져 오기 전에. 이 문제는 여러 종류의 원자 유형을 가진 화합물을 다루므로이를 추적 할 수 있기를 바랍니다.
  2. 문자에서 숫자 배열로 변환하는 데 double (variable) 및 char (variable)을 사용할 수 있지만 첫 번째 열을 숫자 배열로 변경하기 전에 파일을 가져올 수 있어야합니다.

나는 모든 제안을 주셔서 감사합니다. 당신은 직접 (이 .DAT, .txt로, 또는 .csv 스프레드 시트 형식 수락) readtable 사용하여 데이터를 가져올 수 %%

+0

아마도 [importdata] (http://www.mathworks.com/help/matlab/ref/importdata.html?searchHighlight=importdata)를 사용 하시겠습니까? 텍스트 데이터와 숫자를 쉽게 분리하여 개별적으로 처리 할 수 ​​있습니다. –

+0

필요한 데이터를 가져 오기 위해 importdata를 사용할 수 없었습니다. –

답변

0

fid = fopen('test.dat'); 
%one string and 3 numbers 
format= '%s %f %f %f'; 
C = textscan(fid); 
fclose(fid); 
% C is now [{8x1cell} {8x1double} {8x1double} {8x1double}] 
%get the content from C(1) and make a cell array out of C(2:4) 
C= [C{:,1} num2cell([C{2:4}])]; 
+0

조금 더 가세요. 그것은 셀 어레이의 모든 것을 읽습니다. 마지막 세 개의 열을 숫자 형 행렬로 변환하면 어떻게 될까요? – rayryeng

+0

이것은 올바른 방향으로 나아가는 단계 인 것처럼 보이지만, 이것은 각 셀이 3200x1 셀인 (즉, 각 C 위치에 중첩 된 셀이있는) 1x3 셀 'C'를 만듭니다. 어떻게 C를 3200x4 셀로 만들 수 있으며 각 행을 입력 파일의 행으로 만들 수 있습니까? –

+0

나는 본다. 잘 3200x4 부분은 쉽게 내 대답을 편집하지만, 어떻게 거기에서 진행하고 싶니? 다른 형식의 파일이있을 가능성이 있습니까? 요소로 정렬하거나 3D 이미지를 그려야할까요? matlab (셀, 구조체, 행렬)의 다른 유형을 알고 있습니까? 우리가 더 나은 해결책을 찾을 수 있도록 질문을 편집하십시오. – Finn

관련 문제