MATLAB:查找并读取文件中以正则表达式开头的整行

n3h0vuf2  于 2023-03-03  发布在  Matlab
关注(0)|答案(1)|浏览(150)

我试图从一个文件中提取一些数据。在查找单个单词或数值数据时,我成功地使用了regexpi MATLAB函数。但是,现在我试图真实的正则表达式后面一行的所有信息。
例如,从文件中的以下文本:

NAME W-VJJAR 2 1.3 20.3 1 1
ID 3.00000E-01 2.80000E-02 1.00000E+01
IT 3.10000E-01 1.12000E-01 1.00000E+01
IM 3.20000E-01 2.88000E-01 1.00000E+01
NAME E4050 2 1.567 CHAN CHIN CHON
ID 3.00000E-01 2.80000E-02 1.00000E+01
IT 3.10000E-01 1.18000E-01 0.90000E+01
IM 3.20000E-01 2.88000E-01 1.00000E+01
NAME A4TI 5 0.826 PIM PAM PUM
ID 3.00000E-01 2.80000E-02 1.00000E+01
IT 3.20000E-01 1.1000E-01 1.00000E+01
IM 3.20000E-01 2.88000E-01 1.00000E+01

我希望从以IT开头的行中提取所有数据,或者作为单独的字符串

{'3.10000E-01 1.12000E-01 1.00000E+01'}
{'3.10000E-01 1.18000E-01 0.90000E+01'}
{'3.20000E-01 1.1000E-01 1.00000E+01'}

或单元阵列

{'3.10000E-01'} {'1.12000E-01'} {'1.00000E+01'}
{'3.10000E-01'} {'1.18000E-01'} {'0.90000E+01'}
{'3.20000E-01'} {'1.10000E-01'} {'1.00000E+01'}

谢谢大家!

ltskdhd1

ltskdhd11#

有很多方法可以解决这个问题。这里有一个快速的方法(不使用正则表达式)。可能不是最好的方法,但它确实起作用了。

clc;
clear;

filename = "file.txt";
keyword = "IT";

fileID = fopen(filename);

float_results = {};
str_results = {};

while true
  line = fgetl(fileID); % Read a line from the file.
  
  if ~ischar(line) % Exit from the loop by EOF.
    break
  end
  
  if strncmp(line, keyword, length(keyword)) % Check if a line starts with a 'keyword'.
    % To get floating-point values (you probably want that, to manipulate with these numbers later on):
    float_values = sscanf(line, "IT %e %e %e"); % Returns a matrix of floating-point values, skips the 'IT' keyword.
    float_results = [float_results; float_values];
    
    % To get string values:
    line = erase(line, "IT "); % Delete the "IT " part of the line.
    str_results = [str_results; line];
  end
end

fclose(fileID);

相关问题