Matlab的;如何从标题文件(文本文件)中提取信息

时间:2015-06-05 20:54:36

标签: matlab text-files

我有很多文本文件,其中有35行标题后跟一个带有图像数据的大矩阵(该信息可以忽略,此刻不需要读取)。我希望能够读取标题行并提取这些行中包含的信息。例如,标题的前几行是..

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程序上的文本框。

我已经尝试了几件事,但由于我想要提取一些时间的值是在'='之后或在':'之后或者仅仅在''之后,我不知道如何处理这个问题。也许阅读每一行并寻找一个单词的匹配?

非常感谢任何帮助。

谢谢, 亚历

1 个答案:

答案 0 :(得分: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);