【问题标题】:parse text file in MATLAB [duplicate]在MATLAB中解析文本文件[重复]
【发布时间】:2013-04-01 19:30:46
【问题描述】:

如何在 MATLAB 中解析文件?文本中的数据格式如下:

p
15.01245  20.478
12.589  58.256
n
16.589  87.268
52.367  46.256
2.589  58.02

我想将每个数据存储在单独的数组中(;将数据存储在数组1中的字母p下,以及字母n下的数据在数组 2) 中。

有什么帮助吗?

【问题讨论】:

  • 这不是重复的!

标签: matlab parsing matlab-guide


【解决方案1】:

这是另一个解决方案:

fstring = fileread('test.txt'); % read the file as one string
fblocks = regexp(fstring,'[A-Za-z]','split'); % uses any single character as a separator
fblocks(1) = []; % removes anything before the first character
out = cell(size(fblocks));
for k = 1:numel(fblocks)
    out{k} = textscan(fblocks{k},'%f %f','delimiter',' ','MultipleDelimsAsOne', 1);
    out{k} = horzcat(out{k}{:});
end

【讨论】:

  • 谢谢,但我如何读取数据?
  • out{1} 是第一个数组,out{2} - 第二个等
【解决方案2】:

您可以通过使用fgets 逐行读取文件并检查包含pn 的行来执行此操作。

fid = fopen('pn.txt'); % open the file
i2 = 1;
data = {};
while ~feof(fid) % loop over the following until the end of the file is reached.
      line = fgets(fid); % read in one line
      if strfind(line,'p') % if that line contains 'p', set the first index to 1
          i1 = 1;
      elseif strfind(line,'n') % if that line contains 'n' set the first index to 2
          i1 = 2;
      else
          data{i1,i2} =  str2num(line); % otherwise, it the line contains numbers, add them to a cell array.
          i2 = i2 + 1;
      end
end
fclose(fid);

%convert the cell array into two matrices.
p = cell2mat(data(1,:));
p = reshape(p,[numel(p)/2,2])
n = cell2mat(data(2,:));
n = reshape(n,[numel(n)/2,2])

【讨论】:

  • 谢谢,但最后两行给了我这个错误:Error using cell2mat (line 46) 输入单元格数组的所有内容必须是相同的数据类型。
  • 使用上面包含的示例文件是否会出现该错误?
  • 我看到你有一个有效的答案,但我也更新了我的答案。
  • 您的答案现在有效,非常感谢!
猜你喜欢
  • 2014-05-28
  • 2012-09-03
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多