2017-11-09 112 views
1

처음 몇 줄의 텍스트 주석과 실제 데이터 열이있는 .txt 데이터 파일이 있습니다. 그것은이 같은 같습니다 importdata를 사용하여Matlab에서 데이터 파일의 텍스트에서 숫자 데이터 추출

lens (mm): 150 
Power (uW): 24.4 
Inner circle: 56x56 
Outer Square: 256x320 
remarks: this run looks good    
2.450000E+1 6.802972E+7 1.086084E+6 1.055582E-5 1.012060E+0 1.036552E+0 
2.400000E+1 6.866599E+7 1.088730E+6 1.055617E-5 1.021491E+0 1.039043E+0 
2.350000E+1 6.858724E+7 1.086425E+6 1.055993E-5 1.019957E+0 1.036474E+0 
2.300000E+1 6.848760E+7 1.084434E+6 1.056495E-5 1.017992E+0 1.034084E+0 

을 matlab에 자동으로 텍스트 데이터와 실제 데이터를 분리한다. 그러나 텍스트 (셀 형식으로 저장 됨)에서 숫자 데이터를 추출하는 방법은 무엇입니까? 내가 원하는 달성하기 위해해야 ​​할 일 :

  1. 추출물 그 숫자 (예 : 150, 24.4)
  2. 가능하면, 단위를 추출, 이름 ('렌즈', '전원')
  3. 가능하면 압축을 풉니 다 ('mm', 'uW')

1이 중요하며 2 또는 3은 선택 사항입니다. 또한 코드를 단순화하면 텍스트 주석의 형식을 변경하게되어 기쁩니다.

function q47203382 
%% Reading from file: 
COMMENT_ROWS = 5; 
% Read info rows: 
fid = fopen('demo.txt','r'); % open for reading 
txt = textscan(fid,'%s',COMMENT_ROWS,'delimiter', '\n'); txt = txt{1}; 
fclose(fid); 
% Read data rows: 
numData = dlmread('demo.txt',' ',COMMENT_ROWS,0); 
%% Processing: 
desc = cell(5,1); 
unit = cell(2,1); 
quant = cell(5,1); 
for ind1 = 1:numel(txt) 
    if ind1 <= 2 
    [desc{ind1}, unit{ind1}, quant{ind1}] = readWithUnit(txt{ind1}); 
    else 
    [desc{ind1},    quant{ind1}] = readWOUnit(txt{ind1}); 
    end 
end 
%% Display: 
disp(desc); 
disp(unit); 
disp(quant); 
disp(mat2str(numData)); 
end 

function [desc, unit, quant] = readWithUnit(str) 
    tmp = strsplit(str,{' ','(',')',':'}); 
    [desc, unit, quant] = tmp{:}; 
end 

function [desc, quant] = readWOUnit(str) 
    tmp = strtrim(strsplit(str,': ')); 
    [desc, quant] = tmp{:}; 
end 

우리는 두 단계로 데이터를 읽어 다음 숫자의 처음에 주석 행에 대한 textscandlmread

+0

[MATLAB (데이터 변환)의 텍스트 파일 읽기] (https://stackoverflow.com/questions/47122005/read-text-file-in-matlab-data-trancation)의 가능한 복제본 –

답변

1

다음 작업을 수행 할 수 있습니다,의는 샘플 데이터를 demo.txt로 저장되어 있다고 가정 해 봅시다 데이터. 그런 다음 다양한 정보 비트를 얻기 위해 텍스트를 분할해야합니다.

다음은 위의 출력입니다 :

>> q47203382 
    'lens' 
    'Power' 
    'Inner circle' 
    'Outer Square' 
    'remarks' 

    'mm' 
    'uW' 

    '150' 
    '24.4' 
    '56x56' 
    '256x320' 
    'this run looks good' 

    [24.5 68029720 1086084 1.055582e-05 1.01206 1.036552; 
    24 68665990 1088730 1.055617e-05 1.021491 1.039043; 
    23.5 68587240 1086425 1.055993e-05 1.019957 1.036474; 
    23 68487600 1084434 1.056495e-05 1.017992 1.034084] 

가 (내가보기 쉽게 출력을 조금 포맷 할 자유를했다.)

은 참조 : str2double.