Matlab错误:() - 索引必须出现在索引表达式的最后

时间:2016-12-10 13:29:26

标签: matlab

我有这段代码,想在一个制表符分隔的txt文件中写一个数组:

fid = fopen('oo.txt', 'wt+');
for x = 1 :length(s)
fprintf(fid, '%s\t\n',  s(x)(1)) ;
end; 
fclose(fid);

但是我收到了这个错误:

Error: ()-indexing must appear last in an index expression.

我该怎么称呼s(x)(1)? s是一个数组

 s <2196017x1 cell>

当我使用这段代码时,我没有得到任何错误,但是给我回复了一些不是文字的字符。

fprintf(fid, '%s\t\n', ( s{x}{1})) ; 

1 个答案:

答案 0 :(得分:1)

使用MATLAB,您无法在不首先将其分配给临时变量的情况下使用()立即索引函数的结果(尽管Octave 允许这样做)。这是因为当你允许这种情况时会发生一些歧义。

tmp = s(x);
fprintf(fid, '%s\t\n',  tmp(1)) ;

There are some ways around this but they aren't pretty

目前还不清楚您的数据结构到底是什么,但看起来s是一个单元格,所以您应该使用{}索引来访问它的内容

fprintf(fid, '%s\t\n', s{x});

更新

如果您尝试从输入文件中读取单个单词,然后将其写入制表符分隔文件,我可能会执行以下操作:

fid = fopen('input.txt', 'r');
contents = fread(fid, '*char')';
fclose(fid)

% Break a string into words and yield a cell array of strings
words = regexp(contents, '\s+', 'split');

% Write these out to a file separated by tabs
fout = fopen('output.tsv', 'w');
fprintf(fout, '%s\t', words{:});
fclose(fout)