【问题标题】:Matlab read text file to cell arrayMatlab 读取文本文件到元胞数组
【发布时间】:2014-10-29 20:50:15
【问题描述】:

我想从文本文件中读取一些数据,但我不知道该怎么做。 我知道我可以阅读这样的文本文件

fid=fopen('data.txt');
A = textscan(fid,'%s')

返回

A =
{
  [1,1] =
  {
    [1,1] = drink
    [2,1] = water
    [3,1] = drink
    [4,1] = eat
    [5,1] = drink
    [6,1] = spoon
    [7,1] = water
    [8,1] = drink
    [9,1] = water
    [10,1] = drink
  }
}

文本文件如下所示

drink water drink
eat drink spoon
water drink water drink

但我想将数据存储在这样的单元格数组中

A =
{
  [1,1] =
  {
    [1,1] = drink
    [1,2] = water
    [1,3] = drink
  }
  [1,2] =
  {
    [1,1] = eat
    [1,2] = drink
    [1,3] = spoon
  }
  [1,3] =
  {
    [1,1] = water
    [1,2] = drink
    [1,3] = water
    [1,4] = drink
  }
}

我该如何解决这个问题?

【问题讨论】:

  • 仔细检查预期的输出?
  • 仔细检查输出是什么意思?
  • A[1,1] 有三个 drink 单元格,我假设 [1,1] 对应于只有两个 drink 的文本文件的第一行
  • 我们非常着急,不是吗?再次检查?
  • A[1,3] 也感觉被忽视了。提醒我我也需要一些饮料,我的意思是水。

标签: matlab text cell-array


【解决方案1】:

您可以将importdataregexp'Split' 选项结合使用-

out = cellfun(@(x) regexp(x,'\s','Split'),importdata(text_filename,'\n'),'un',0).'

输出 -

out{1,1}
ans = 
    'drink'    'water'    'drink'
out{1,2}
ans = 
    'eat'    'drink'    'spoon'
out{1,3}
ans = 
    'water'    'drink'    'water'    'drink'

【讨论】:

  • 谢谢,但这并没有真正起作用。我对matlab相当陌生。我尝试了您的解决方案,但出现错误:'un' 语法错误。你能解释一下这个'un'是什么意思吗
  • @user2348157 尝试将'un' 替换为'UniformOutput' 并告诉我进展如何? 'un' 就像是那个的简写。
  • @user2348157 更多信息请参考官方文档页面-mathworks.in/help/matlab/ref/cellfun.html
  • 更换后我没有收到错误。但我现在得到了这个 cellfun:C 必须是一个单元格数组。我不确定我是否理解正确。而不是使用 A=textscan... 我使用你发布的代码,我应该得到单元格数组?
  • @user2348157 您是否使用文本文件的路径编辑了text_filename?你应该这样做。因此,如果 data1.txt 是工作目录中文本文件的名称,则它是 - out = cellfun(@(x) regexp(x,'\s','Split'),importdata('data1.txt','\n'),'un',0).'
猜你喜欢
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
相关资源
最近更新 更多