2017-02-28 7 views
0

MATLAB에서 dir('*.txt')을 사용하는 폴더에서 텍스트 파일을 읽습니다. 텍스트 파일의 이름은 0, 4, 8, 12, ..180.txt입니다. dir0을 먼저 반환 한 다음 100104 등과 같이 반환합니다. 왜 이런 일이 일어나는 걸까요? 당신이 파일 의 순서와 당신은 이미 자신의 이름을 알고에 민감한 경우Matlab dir ('* .txt') 명령이 txt 파일을 순서대로 나열하지 않음

+4

이것은 사전 식 순서가 작동하는 방식입니다 ... –

답변

2

Lexicographical ordering 작품 만있는 정보를보고 결정을 내리는 데 필요합니다. 우리의 경우 정보는 파일 이름에있는 문자의 ASCII 값입니다. 다음의 예를 고려해

  • 을 우리가 두 개의 파일 이름 10.txt2.txt이있는 경우, 목록 메커니즘은 이러한 파일의 1 문자, 즉 12을 비교하며, 작은 중 반환합니다, 이 경우에는 10.txt에 속하는 1입니다.

  • 대신 우리가 가진 경우 2.txt20.txt은, 첫 번째 문자는 동일하므로 다음 문자는 . 또는 0 중 하나 인 비교됩니다. 여기에서 .의 ASCII 값은 46이고 0의 값은 48이므로 2.txt이 먼저 반환됩니다.

당신은 항상 의미, 당신은 파일 이름에 필요한 최대 자릿수를함으로써이 문제를 해결 할 수 있습니다

0.txt --> 000.txt 
4.txt --> 004.txt 
25.txt --> 025.txt 
180.txt --> 180.txt 

그런 다음 파일이 예상되는 순서로 반환됩니다.

0

, 당신은 모든 dir을 사용할 필요가 없습니다 :

for ii=0:4:180 
    filename = sprintf('%d.txt', ii); 
    fid = fopen(fullfile('/path/to', filename), 'r'); 
    % ... do the processing here 
    fclose(fid); 
end