2016-07-12 3 views
0

많은 수의 .mat 파일로 구성된 데이터 세트가 있습니다. 각 .mat 파일은 상당한 크기입니다. 즉, 파일을로드하는 데 시간이 많이 걸립니다. 불행히도 일부 파일이 손상되어 load('<name>')이 해당 파일에 오류를 반환합니다. try-catch 루틴을 구현하여 손상된 파일을 확인했습니다. 그러나 이들 중 소수만이 손상된 상황에서 각 파일을로드하고 파일이 손상되었는지 확인하는 데 시간이 걸립니다. load('<name>')을 사용하지 않고 .mat 파일의 상태를 확인할 수있는 방법이 있습니까?MAT 파일이로드없이 손상되었는지 확인하십시오.

나는 어디에서나 그런 해결책을 찾는 데 실패했습니다.

+0

['try'] (http://www.mathworks.com/help/matlab/ref/try.html) 도움이 될 것 같아요. – shamalaia

+0

@shamalaia''try' 안에'load'를 사용하면 시간이 걸립니다. . 나는 시간을 절약하기 위해'load'를 사용하지 않고 해결책을 찾고 있습니다. – user3342981

답변

2

matfile 함수는 메모리에로드하지 않고 MAT- 파일의 변수에 액세스하는 데 사용됩니다. try-catch 루틴을 load 대신 matfile 대신 사용하도록 변경하면 대용량 파일을 메모리에로드하는 오버 헤드가 줄어 듭니다.

matfile은 손상된 파일을 읽을 때만 경고 메시지를 표시하므로이 경고가 발행되었는지 확인해야합니다. 경고가 이후에 발행 된 경우 matfile를 호출하기 전에 명확 lastwarn 및 확인 :

lastwarn(''); 
matfile(...); 
[~, warnId] = lastwarn; 
if strcmp(warnId, 'relevantWarningId') 
    % File is corrupt 
end 

가 먼저 관련 경고 ID를 알아 내야합니다, 손상된 파일에 위의 코드를 실행하여이 lastwarn를 사용하여 수행 할 수 있습니다 warnId을 저장합니다.

더 강력한 솔루션은 파일을 만들 때 파일의 체크섬 또는 해시 (예 : MD5)를 계산하고 파일을 읽기 전에이 체크섬을 비교하는 것입니다.

+0

손상된 MAT 파일로'matfile()'이 손상을 감지 할 수 없다는 것을 확인했습니다. 'matfile' 객체 내부의 변수에 접근 할 때만 오류가 발생합니다. 따라서 try-catch는 에러 만 잡기 때문에 try-catch 안에서'matfile()'을 사용하면 효과가 없습니다. 그러나 좋은 소식은'matfile()'은 손상된 파일을 읽을 때 경고를줍니다. try-catch 루틴 catch 경고를 만들 수있는 방법을 찾으면 최선의 선택입니다. 또한, 해시 값을 사용하는 aliter 솔루션이 매우 강력하다는 것을 알았습니다. 귀하의 답변에 감사드립니다. – user3342981

+0

의견을 보내 주셔서 감사합니다. 나는 경고를 "파악"하는 해결책으로 나의 대답을 확장했다. – hbaderts

관련 문제