MATLAB;如何从头文件(文本文件)中提取信息

Posted

技术标签:

【中文标题】MATLAB;如何从头文件(文本文件)中提取信息【英文标题】:Matlab; how to extract information from a header's file (text file) 【发布时间】:2015-08-20 22:36:37 【问题描述】:

我有许多文本文件,它们有 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】:

这并不是特别困难,其中一种方法是按照您的建议逐行解析。像这样的:

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);

【讨论】:

以上是关于MATLAB;如何从头文件(文本文件)中提取信息的主要内容,如果未能解决你的问题,请参考以下文章

bat中如何筛选文本文件中某行某段文字,提取并给变量赋值

MATLABUTF-8编码文本输出

从文本文件中查找和提取数据

使用 PyPDF2 从 PDF 文件中提取文本

请问如何用matlab创建TXT文本文档啊?

从 HTML 页面上的多个帖子中提取三个文本项到 csv 或类似文件中?