현재 다음과 같이 정확히 작성된 텍스트 파일에서 데이터를 읽으려고합니다.
Height = 10
Length = 10
NodeX = 11
NodeY = 11
K = 10
나는 이와 같은 작은 코드를 작성했습니다
fileID = fopen('input.dat','r');
[a, b] = fscanf(fileID, '%s %f')
그리고 나는 다음과 같은 답을 얻습니다.
a =
72
101
105
103
104
116
b =
1
형식 사양을 지정하기 위해 관리하지 않는 것이 분명해 보입니다. 동일한 파일에서 부동 소수점과 함께 문자열을 여러 번 선택하는 방법을 알고 싶습니다.
로 문서 에 대한 fscanf
상태 :
formatSpec
숫자 및 문자 지정자의 조합이 포함 된 경우fscanf
각 문자를 해당 숫자로 변환합니다. 이 변환은 형식이 모든 숫자 값을 명시 적으로 건너 뛰는 경우에도 발생합니다 (예 :formatSpec
is'%*d %s'
).
MATLAB은 혼합 된 데이터 유형을 읽는 데 짜증나게 나쁠 수 있습니다. 한 가지 가능한 대안은 각 줄을 읽고 간단한 정규 표현식을 사용하여 데이터를 분할하는 것입니다.
fileID = fopen('results.txt','r');
mydata = {};
ii = 1;
while ~feof(fileID) % While we're not at the end of the file
tline = fgetl(fileID); % Get next line
mydata(ii,:) = regexp(tline, '([a-zA-Z])* = (\d*)', 'tokens');
ii = ii + 1;
end
fclose(fileID);
이는 5 x 1
각 셀에 데이터와 일치하는 2 개의 셀 (약간 성가 시지만 빼낼 수 있음)이 포함 된 셀형 배열을 반환합니다 . 이 경우 mydata{1}{1}
is Height
및 mydata{1}{2}
is 10
입니다.
편집하다:
그리고 다음과 같이 reshape
호출 하여 셀형 배열을 평면화 할 수 있습니다 .
mydata = reshape([mydata{:}], 2, [])';
mydata
이 경우 5x2
셀형 배열 로 바뀝니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다