【问题标题】:Storing Matlab data and strings in a tabulated file将 Matlab 数据和字符串存储在表格文件中
【发布时间】:2014-05-23 02:55:17
【问题描述】:

我正在创建一个打开图像的程序,并使用 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('%s\t',1,size(Batter,2)-1),'%s\n'];
fprintf(fid,fmtString,Batter,result);
fclose(fid);

for i=1:length(M)
    fprintf(fileID,'%6.2f %6.2f %d\n',M(i,1),M(i,2),M(i,3));
end

fclose(fileID);

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

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

但我无法让一切正常工作。非常感谢您的帮助。

【问题讨论】:

    标签: string image matlab printf ginput


    【解决方案1】:

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

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

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

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

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

    fprintf(fileID,'%6.2f %6.2f %d\n', M.');
    

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

    希望这有助于将您推向正确的方向。在评论中回复我,如果您需要更多帮助,我们可以继续讨论。

    【讨论】:

    • 感谢您的帮助。我尝试了 sprintf,但它并没有完全符合我的要求。本质上,我不想以字符串形式打印出坐标,而是想将坐标替换为字符串,例如我想打印到文件中的名称。
    猜你喜欢
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多