Arrays MATLAB fprintf打印单元数组到文本文件

Arrays MATLAB fprintf打印单元数组到文本文件,arrays,matlab,matrix,printf,cell-array,Arrays,Matlab,Matrix,Printf,Cell Array,我试图使用MATLAB fprintf命令将存储在向量中的字符串分隔表打印到文本文件中。选择并打印向量中的哪些字符串取决于在程序的主while循环中构造的矩阵。然而,当我试图运行代码时,MATLAB给了我一个错误,即“下标索引必须是正整数或逻辑的。”给出了一个示例矩阵和示例字符串数组,以及我当前的fprintf代码。我真的很想了解这里发生了什么,以及关于如何更好地设置它的任何希望或建议。矩阵和单元数组是我在运行程序时得到的实际示例。提前谢谢 Pitches={'Fastball','Curveb

我试图使用MATLAB fprintf命令将存储在向量中的字符串分隔表打印到文本文件中。选择并打印向量中的哪些字符串取决于在程序的主while循环中构造的矩阵。然而,当我试图运行代码时,MATLAB给了我一个错误,即“下标索引必须是正整数或逻辑的。”给出了一个示例矩阵和示例字符串数组,以及我当前的fprintf代码。我真的很想了解这里发生了什么,以及关于如何更好地设置它的任何希望或建议。矩阵和单元数组是我在运行程序时得到的实际示例。提前谢谢

Pitches={'Fastball','Curveball','Screwball','Riseball','Changeup','Dropball'};
tp={'Strike','Ball'};
ResultHit={'Single','Double','Triple','Home Run','Bunt','ROE'};
ResultOut={'Strikeout','Groundout','Flyout','Foulout'};

M= [4,1,0,0;2,2,0,0;3,1,0,0;5,1,1,0];


fileID = fopen('gamedata.txt','w');

for i=1:length(M)

    fprintf(fileID,'%s %s %s %s\n',Pitches{M(i,1)},tp{M(i,2)},...
    ResultHit{M(i,3)},ResultOut{M(i,4)});

end

fclose(fileID);

M矩阵在第三列和第四列中有零:

M =

 4     1     0     0
 2     2     0     0
 3     1     0     0
 5     1     1     0
因此,当代码开始在for循环中迭代时,M(1,3)M(1,4)都是零,并且都是ResultHitResultOut数组中的无效索引…因此错误消息(索引必须是正整数)

我认为您需要的是ResultHitResultOut数组中的“N/A”字符串,它们对应于在该音高上没有命中或没有出局。它们都可能位于阵列的第一个位置,并且从上面的M更改为

M =

 4     1     1     1
 2     2     1     1
 3     1     1     1
 5     1     2     1

这应该可以让代码继续运行。

我明白了,我不知道0不是一个正整数。谢谢你的帮助。