【问题标题】:MATLAB fprintf printing cell array to text fileMATLAB fprintf 将单元阵列打印到文本文件
【发布时间】:2014-05-30 00:31:25
【问题描述】:

我正在尝试使用 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);

【问题讨论】:

    标签: arrays matlab matrix printf cell-array


    【解决方案1】:

    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) 是两个零都是 ResultHit 和 ResultOut 数组的无效索引……因此出现错误消息(索引必须是正整数)。

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

    M =
    
     4     1     1     1
     2     2     1     1
     3     1     1     1
     5     1     2     1
    

    这应该允许代码继续进行。

    【讨论】:

    • 我明白了,我不知道 0 不被认为是正整数。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多