【问题标题】:Split up line in columns in matlab在matlab中的列中拆分行
【发布时间】:2018-10-04 20:04:35
【问题描述】:

我有一个名为 robot4_motors.txt

的数据文件

它持有的数据是这样的

M 524 20795 20794 3000 0 16067 16066 3000 0 0 0 6000 0
M 735 20795 20795 3000 0 16067 16066 3000 0 0 0 6000 0
M 995 20795 20795 3000 0 16067 16067 3000 0 0 0 6000 0
M 995 20795 20795 3000 0 16067 16067 3000 0 0 0 6000 0
M 1233 20795 20795 3000 0 16067 16067 3000 0 0 0 6000 0
M 1499 20795 20795 3000 0 16067 16067 3000 0 0 0 6000 0
M 1763 20795 20795 3000 0 16067 16067 3000 0 0 0 6000 0
M 1763 20795 20795 3000 0 16067 16067 3000 0 0 0 6000 0
M 2025 20795 20795 3000 0 16067 16066 3000 0 0 0 6000 0
M 2276 20795 20795 3000 0 16067 16066 3000 0 0 0 6000 0
M 2533 20795 20794 3000 0 16067 16067 3000 0 0 0 6000 0
M 2533 20795 20794 3000 0 16067 16067 3000 0 0 0 6000 0
M 2834 20866 20857 3000 500 16138 16129 3000 500 0 0 6000 0
M 3084 20993 20994 3000 500 16265 16267 3000 500 0 0 6000 0
M 3300 21122 21124 3000 500 16393 16395 3000 500 0 0 6000 0
M 3548 21251 21252 3000 500 16522 16523 3000 500 0 0 6000 0
M 3548 21251 21252 3000 500 16522 16523 3000 500 0 0 6000 0

等等。现在我想将行拆分为列

f = fopen('robot4_motors.txt');
tline = fgetl(f); 
while ischar(tline)
    tline = fgetl(f);
    C=strsplit(tline)
    disp(C)
end
fclose(f);

这段代码为我提供了前几行的正确输出,然后引发错误。

使用 strsplit 时出错(第 80 行)第一个输入必须是字符 向量或字符串标量。

技巧错误(第 8 行) C=strsplit(tline)

解决这个问题的方法是什么?

【问题讨论】:

    标签: matlab file


    【解决方案1】:

    看看你的代码在第一次循环中做了什么:

    tline = fgetl(f);     % Read in 1st line
    while ischar(tline)   % Make sure it's a char array
        tline = fgetl(f); % Discard 1st line, get 2nd line
        C=strsplit(tline) % Work with the line
        disp(C)           % Display the line
    end                   % Go back to while...
    

    在循环结束时,您返回到while 语句,当然,您检查刚刚处理的行实际上是一个字符串。然后你读入一个新行并处理它。也就是说,每次您第一次处理该行时,然后检查它是否是一个字符串。此外,您永远不会处理从文件中读取的第一行。您需要反转这些测试。一种方法是:

    tline = fgetl(f); 
    while ischar(tline)
        C=strsplit(tline)
        disp(C)
        tline = fgetl(f);
    end
    

    在这里,你测试该行是一个字符串,处理它,然后读取一个新的,然后测试它是一个字符串,等等。

    编写相同循环的更好方法是:

    while 1
        tline = fgetl(f);
        if ~ischar(tline), break, end
        C=strsplit(tline)
        disp(C)
    end
    

    这里你不需要重复fgetl 行,事情的顺序更清楚一点:你读一行,测试它,然后打印它。 while 1 是一个无限循环,你可以用 break 打破它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 2013-09-11
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      相关资源
      最近更新 更多