2015-06-05 3 views
0

У меня есть много текстовых файлов с 35 строками заголовка, за которыми следует большая матрица с данными изображения (эту информацию можно игнорировать и ее не нужно читать на момент). Я хочу иметь возможность читать строки заголовков и извлекать информацию, содержащуюся в этих строках. Например, первые несколько строк заголовка: ..Matlab; как извлечь информацию из файла заголовка (текстовый файл)

File Version Number: 1.0 

    Date: 06/05/2015 

    Time: 10:33:44 AM 
    =========================================================== 
    Beam Voltage (-kV) = 13.000 

    Filament (W) = 4.052 

    Cond. (-kV) = 8.885 

    CenterX1 (V) = 10.7 

    CenterY1 (V) = -45.9 

    Objective (%) = 71.40 

    OctupoleX = -0.4653 

    OctupoleY = -0.1914 

    Angle (deg) = 0.00 

.

Я хотел был бы иметь возможность открыть этот текстовый файл и прочитать наружу день и время создания файла, мощность накаливания, напряжение конденсатора, угол и т. Д. И сохранить их в переменных или отправить их в текстовое поле программы GUI.

Я пробовал несколько вещей, но поскольку значения, которые я хочу извлечь несколько раз, после «=» или после «:» или просто после «», то я не знаю, как подойти к этому. Возможно, читайте каждую строку и ищите совпадение слова?

Любая помощь будет высоко оценена.

Спасибо, Alex

ответ

0

Это не особенно трудно, и один из способов сделать это было бы разобрать строку за строкой, как вы предложили. Что-то вроде этого:

MAX_LINES_TO_READ = 35; 

fid = fopen('input.txt'); 
lineCount = 0;  

dateString = ''; 
beamVoltage = 0; 
while ~eof(fid) 
    line = fgetl(fid); 
    lineCount = lineCount + 1; 

    %//check conditions for skipping loop body 
    if isempty(line) 
     continue 
    elseif lineCount > MAX_LINES_TO_READ 
     break 
    end 

    %//find headers you are interested in 
    if strfind(line, 'Date') 
     %//find the first location of the header separator 
     idx = find(line, ':', 1); 
     %//extract substring starting from 1 char after separator 
     %//note: the trim is to get rid of leading/trailing whitespace 
     dateString = strtrim(line(idx + 1 : end)); 
    elseif strfind(line, 'Beam Voltage') 
     idx = find(line, '=', 1); 
     beamVoltage = str2double(line(idx + 1 : end)); 
    end 
end 

fclose(fid);