在表格文件中存储Matlab数据和字符串



我正在创建一个打开图像的程序,并使用MATLAB ginput命令存储x和y坐标,在循环中对其进行操作以满足if语句的要求,并输出与ginput会话期间单击的区域对应的数字或字符串。同时,我使用输入命令从命令窗口输入与这些数字相关的字符串。ginput会话被放置在while循环中,因此在特定区域单击将结束输入会话。对于每个会话(while循环),只需要来自命令窗口的一个或两个输入。最后,我试图将所有的数据存储在一个csv或txt文件,但我希望它被制表,所以它很容易阅读,即行和列与标题。我将包括一些示例代码。我的问题是:1,如何将x和y坐标的输入转换为字符串?对数字这样做很简单,但我不能让它对字符串工作。2、任何关于打印字符串和数字到表格文本或CDV文件的帮助将不胜感激。

命令行输入:

prompt='Batter:';
Batter=input(prompt,'s');
While循环

:

count=1;
flag=0;
while(flag==0)

    [x,y]= ginput(1);
    if (y>539)
        flag=1;
    end
    if x<594 && x>150 && y<539 && y>104
        %it's in the square
        X=x;
        Y=y;
    end
    if x<524 && x>207 && y<480 && y>163
       result='strike'
    else
        result='ball'
    end
    [x,y]= ginput(1);
    pitch=0;
    if x<136 && x>13
        %its' pitch column
        if y<539
            pitch=6;
        end
        if y<465
            pitch=5;
        end
        if y<390
            pitch=4;
        end
        if y<319
            pitch=3;
        end
        if y<249
            pitch=2;
        end
        if y<175
            pitch=1;
        end
    end
    if pitch==0
    else
        plot(X,Y,'o','MarkerFaceColor',colors(pitch),'MarkerSize',25);
        text(X,Y,mat2str(count));
    end
    count=count+1
    M(count,:)=[X,Y,pitch];
end

对于上面的if语句系列,如果满足条件,我希望输出字符串而不是数字1-6。fprintf函数用于打印到文件,但是我在使用它组合字符串和数字时遇到了问题:

fileID = fopen('pitches.csv','w');
fid = fopen('gamedata.txt','w');
fmtString = [repmat('%st',1,size(Batter,2)-1),'%sn'];
fprintf(fid,fmtString,Batter,result);
fclose(fid);
for i=1:length(M)
    fprintf(fileID,'%6.2f %6.2f %dn',M(i,1),M(i,2),M(i,3));
end
fclose(fileID);

我尝试将字符串句柄添加到fprintf命令以及M的列,但得到错误。我要么需要将它们存储在数组中(如何存储?)并将所有数组列打印到文件中,要么使用其他方法。我还尝试了writetable方法的一个版本:

 writetable(T,'tabledata2.txt','Delimiter','t','WriteRowNames',true)

但是我不能让每件事都正常工作。非常感谢你的帮助。

让我们一个一个地解决你的问题:

1,如何将x和y坐标的输入转换为字符串?

可以在MATLAB中使用sprintf命令。这与fprintf的语法完全相同,但该函数的输出将为您提供您想要的任何字符串/字符数组。

2,任何关于打印字符串和数字到表格文本或CDV文件的帮助将不胜感激。

您仍然可以使用fprintf,但您可以指定矩阵作为输入。因此,您可以这样做:

fprintf(fileID,'%6.2f %6.2f %dn', M.');

这将把整个矩阵写入文件。但是,这里必须小心,因为MATLAB以列主格式写入文件。这意味着它将沿着行遍历,然后再转到下一列。如果你想一行一行地写数据,你需要先对矩阵进行转置,这样当你遍历这些行时,它基本上就会做你想做的事情。在开始尝试将字符串写入文件之前,您需要记住这一点。我建议您将每个字符串放在cell数组中,然后循环遍历cell数组中的每个元素,并逐行单独编写每个字符串。

希望这能帮助你朝正确的方向前进。如果你需要更多的帮助,请在评论中回复我,我们可以继续讨论。

最新更新