측정 장치에서 생성 된 텍스트 파일의 수치 데이터에 액세스하려고합니다. 파일에는 문자열과 숫자가 혼합되어 있으며 항목은 탭으로 구분됩니다. 직사각형이 아니기 때문에 dlmread와 같은 matlab의 파일 로딩 기능에 적합하지 않습니다. 파일을 엑셀 스프레드 시트로 변환하고 xlsread로로드 할 수 있지만 수백 개의 파일을 처리 할 때 옵션이 아닙니다. 여기 Matlab에서 테이블 화 된 데이터 파일을 강력하게 읽음
는 파일이 어떻게 생겼는지 :Heading String
Commenttext
X Axis Trace A Trace B
Frequency Funct Ch1 Funct Ch2
Frequency/Hz Funct Ch1/dBr Funct Ch2/dBV
Hz dBr dBV
LOG LIN LIN
100 -60.35 -71.1446
10000 -7.48178 -12.0321
VOID VOID VOID
VOID VOID VOID
Scan #-5 Labeltext Labeltext
Hz V V
1.000000000000e+003 3.999999910593e-002 1.000000000000e+000
A-X/37 A-Y A-LimLow A-LimUpp A-RefY in V B-X/37 B-Y B-LimLow B-LimUpp B-RefY in V
1.000000000000e+002 -4.873095199691e+001 VOID VOID 3.999999910593e-002 1.000000000000e+002 -2.026775796775e+001 VOID VOID 1.000000000000e+000
1.172102297533e+002 -4.492478734843e+001 VOID VOID 3.999999910593e-002 1.172102297533e+002 -2.024411835772e+001 VOID VOID 1.000000000000e+000
1.373823795883e+002 -3.994765661259e+001 VOID VOID 3.999999910593e-002 1.373823795883e+002 -2.022767912575e+001 VOID VOID 1.000000000000e+000
1.610262027561e+002 -3.628116388971e+001 VOID VOID 3.999999910593e-002 1.610262027561e+002 -2.021939551014e+001 VOID VOID 1.000000000000e+000
1.887391822135e+002 -3.285059881019e+001 VOID VOID 3.999999910593e-002 1.887391822135e+002 -2.021928320409e+001 VOID VOID 1.000000000000e+000
2.212216291070e+002 -2.987476652701e+001 VOID VOID 3.999999910593e-002 2.212216291070e+002 -2.022570411546e+001 VOID VOID 1.000000000000e+000
2.500000000000e+002 -2.751190343935e+001 VOID VOID 3.999999910593e-002 2.500000000000e+002 -2.023346726318e+001 VOID VOID 1.000000000000e+000
2.592943797405e+002 -2.728162367715e+001 VOID VOID 3.999999910593e-002 2.592943797405e+002 -2.023601503648e+001 VOID VOID 1.000000000000e+000
등
것을참고 : - -5 파일 에 얼마나 많은 반복 하더군요 스캔 # 앞의 값 - AX/37은 스캔 당 몇 줄이 있는지 말해줍니다. - 'VOID'요소는 적용 가능한 경우 실제 숫자로 대체되며 반대의 경우도 마찬가지입니다.
나는 존재하는 값을 추출 할 수 있고 내 스크립트는 추적 크기, 반복 횟수 또는 값이 숫자인지 'VOID'인지에 의존하지 않는다.
지금까지 다른 자국에 주어진 조언에 따라,이 같은 각 행의이 개 첫번째 숫자를 파일의 행 배열을 만들고 추출 할 수 있었다 :
fid=fopen('data.txt');
Rows = textscan(fid,'%s', 'delimiter','\n'); %Creates a temporary array with the rows of the file
fclose(fid);
TraceStarts=strfind(Rows{1,1},'Scan'); %Looks for the start of each trace..
TracesIdx = find(~cellfun('isempty', TraceStarts)); %.. and stores the indexes.
Traces= cellfun(@(x) textscan(x,'%f','delimiter','\t', 'CollectOutput',1), Rows{1,1});
흔적은 행 당 최대 두 개의 첫 번째 숫자를 갖는 각 행에 대한 배열을 포함하는 셀. 2가 2의 미스테리 인 것을 발견 한 후 행의 float 항목 검색을 중지하는 이유 ... 숫자가 다를 수 있으므로 각 행의 숫자와 문자열의 시퀀스를 지정하고 싶지 않습니다.
도움을 주시면 감사하겠습니다.
downvoter가 관심을 가져 주시겠습니까? –