Software/MATLAB
[MATLAB] .txt 파일 행렬로 읽어오기 (fopen, fscanf)
_winmin
2025. 1. 20. 11:59
실험 결과 logging 후 MATLAB으로 가져와 해석할 때 자주 쓰이는 방법이라 기록해두려 한다.
매 loop 마자 특정 데이터를 저장하고, 그것을 .txt 확장자로 저장했다고 하자.
"test.txt"
1 2 3 4 5 6
2 4 6 8 10 12
3 6 9 12 15 18
...
6개의 원소를 매 loop마다 저장해 (한 행) 총 n개의 열을 저장해다.
이제 생성된 txt 파일을 script와 같은 경로에 두고 (같은 경로가 아니라면 fopen 함수의 경로 파라미터에 따로 지정), 아래 코드를 작성한다.
file1 = fopen('test.txt','r');
test_arr= fscanf(file1, '%f');
test_mat= reshape( test_arr , 6, [])' ; % [n x 6] 행렬
|
fopen
지정해준 접근 권한으로 파일을 열어준다.
<접근권한>
'r' | Read 권한 |
'w' | Write 권한 |
'a' | Write 권한. 파일 끝으로 새로운 데이터 append |
'w+' | Read & Write 권한 |
'a+' | Read & Write 권한, 파일 끝으로 새로운 데이터 append |
'A' | Write 권한, 파일 끝으로 새로운 데이터 append, 자동 버퍼 flushing 해제 |
'W' | Write 권한, 자동 버퍼 flushing 해제 |
fscanf
열려있는 파일을 주어진 포맷에 맞게 열벡터로 읽어온다.
자주 쓰이는 포매터 종류이다.
<포매터>
%d | Integer. 10진수 |
%u | Unsigned Integer, 10진수 |
%f | Floating point |
reshape
fscanf 로 읽어온 데이터는 열벡터니, 원래 데이터 포멧에 맞게 행렬로 만들어준다.
fscanf 는 열 순서대로 읽어오니 reshape 전에는
[1 2 3 4 5 6 2 4 6 8 10 12 3 6 9 12 15 18 .. ]'
이런 순서이다.
다시 원래 행렬과 같은 크기를 만든다고
reshape(test_arr, [], 6)
을 쓰면 행렬 데이터가 꼬이는 것이다.
reshape(test_arr, 6, []) 을 먼저 하고 transpose를 해주는 이유이다.
fclose
계산을 다 끝냈으면 fclose로 fopen으로 열었던 파일을 닫아준다.
fclose(file1); % file id 로 특정 파일을 닫아줌 fclose('all'); % 열린 파일 전부를 닫아줌 |