【问题标题】:Read Floating Point Numbers from string in Matlab在 Matlab 中从字符串中读取浮点数
【发布时间】:2017-02-27 19:01:40
【问题描述】:

我是 Matlab 的新手,我正在尝试从 Matlab 中的文本文件中读取数据(x,y 坐标)并存储在二维数组中。我的目标是查看以下格式的文本文件:

XPos 4180
YPos 60
Orientation 98.69
AccelX 438.00
AccelY 161.00
AccelZ -865.00
XPos 4079
YPos -379

我能够检查该行是否包含“XPos”,但我无法检索同一行上的数字并将其存储在我已初始化的空数组中。我尝试过使用 sscanf 和正则表达式。我已经注释掉了正则表达式行,但它确实有效。然而,它将值存储在一个单元格数组中,但同样,我在尝试从单元格数组中检索值并将其存储在我的空二维数组中时遇到了问题。

dataPoints = zeros(n,n);
row = 0;
column = 0;

file = fopen('file.txt', 'r');

while ~feof(file)
    line = fgets(file);
    fprintf(line);

    k = strfind(line, 'XPos');

    if(isempty(k))

    else
        fprintf('Found One');
        %x = regexp(line, '.*?(\d+(\.\d+)*)', 'tokens' );
    end
end

【问题讨论】:

    标签: matlab multidimensional-array text-files string-comparison


    【解决方案1】:

    您可以使用textscan。例如:

    fid = fopen(s);
    C = textscan(fid,'%s %f');
    fclose(fid);
    
    array2D = [C{2}(strcmp(C{1},'XPos')),C{2}(strcmp(C{1},'YPos'))]
    

    但我不太确定你想要什么作为输出。

    【讨论】:

    • 可能是array2D = [C{2}(strcmp(C{1},'XPos')),C{2}(strcmp(C{1},'YPos'))]
    • 谢谢。你们太棒了。
    • 在 Jon 评论后编辑
    【解决方案2】:

    一个简单的 sscanf 也可以工作,一旦你检测到行中的字符串 XPos,命令: c = sscanf('XPos 4180','XPos %f') 返回数字 4180。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 2020-08-04
      相关资源
      最近更新 更多