【问题标题】:Simplest way to read space delimited text file matlab读取空格分隔的文本文件matlab的最简单方法
【发布时间】:2014-03-09 20:52:11
【问题描述】:

好的,所以我正在为最平凡的事情苦苦挣扎,我有一个空格分隔的文本文件,第一行有一个标题,每个观察有一行,我想在 matlab 中打开该文件。如果我在 R 中这样做,我完全没有问题,它将创建最基本的矩阵,瞧!

但是 MATLAB 似乎对此很恼火......

文本文件示例:

"picFile" "subjCode" "gender"
"train_1" 504 "m"
 etc.

我能得到类似矩阵的东西吗?然后我想让 MATLAB 通过执行 data(1,2) 来提取一些数据。

最简单的方法是什么? 似乎不得不使用 f 型函数编写循环只是浪费时间......

【问题讨论】:

  • 作者也是从对比R开始的abandonmatlab.wordpress.com/2012/08/07/…
  • 到目前为止您尝试过什么? textscan 可以忽略标题行等。您将无法在矩阵中混合字符串和数值。需要一个元胞数组或表格。
  • 我尝试了textread,最终不得不为每一列指定格式...有时 MATLAB 有点过于迂腐

标签: matlab text


【解决方案1】:

如果你有足够新的 Matlab 版本(我相信是 R2013b+),你可以使用readtable,这非常类似于 R 的做法:

T = readtable('data.txt','Delimiter',' ')

many functions 用于操作表格并在表格和其他数据类型(如元胞数组)之间来回转换。

统计工具箱的data import and export 部分中还有一些其他选项应该适用于旧版本的 Matlab:

  • tblread:根据字符串和数字的单独变量输出
  • caseread: 以字符数组形式输出
  • tdfread:以结构形式输出

或者,textscan 应该能够完成您需要的并且可能是最快的:

fid = fopen('data.txt');
header = textscan(fid,'%s',3);            % Optionally save header names
C = textscan(fid,'%s%d%s','HeaderLines',1); % Read data skipping header
fclose(fid);                                % Don't forget to close file
C{:}

【讨论】:

  • 谢谢。最终使用下面发布的textread 实现了与您的解决方案非常相似的东西。
【解决方案2】:

找到了解决我问题的方法。

因为我没有最新版本的 MATLAB 并且不能使用 readable,这将是我最终使用 textread 并指定每列的格式的首选选项。 乏味但也许是我能找到的“最简单”的方式:

[picFile subCode gender]=textread('data.txt', '%s %f %s', 'headerlines',1);
T=[picFile(:) subCode(:) gender(:)]

textscan solution by @horchler 看起来很相似。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多