【发布时间】:2018-07-05 21:38:43
【问题描述】:
假设我有一个明文文件test.dat:
foo bar baz
qux ham spam
我知道想将其作为二维元胞数组加载到 Octave(或 Matlab 中),保留以空格和换行符编码的结构。根据我对the documentation的理解,应该是这样的:
format = '%s';
file = fopen('test.dat');
data = textscan(file,format);
fclose(file);
disp(data);
但是这只会将数据加载为一维数组:
{
[1,1] =
{
[1,1] = foo
[2,1] = bar
[3,1] = baz
[4,1] = qux
[5,1] = ham
[6,1] = spam
}
}
明确指定Delimiter、Whitespace 和EndOfLine 没有帮助(那么后者的意义何在?);也不使用其他加载函数,如 textread 或 dlmread。有效的是在上面使用format = '%s%s%s',但这需要我以某种方式确定列数,函数应该能够自己完成。
因此我问:是否有任何内置函数可以满足我的需求?我对自己编写这样一个函数的方法不感兴趣——我有信心我可以做到这一点,但这正是我想要避免的(因为我需要用它来展示良好的做法,因此不要重新发明轮子)。
相关问答(所有都知道列数):
【问题讨论】:
-
如果您使用
%s作为格式,textscan会将整行视为一个字符串,所以是的,您确实需要知道列数。您唯一的其他选择是使用fgetl一次扫描每一行,然后使用您必须将每行拆分为单独字符串的任何分隔符解析结果行。 -
@am304:如果您使用
%s作为格式,textscan会将整行视为一个字符串 – 不,它不会。它单独加载六个元素中的每一个;只是安排丢失了。