Разделить строку в столбцах в Matlab - PullRequest
0 голосов
/ 04 октября 2018

У меня есть файл данных с именем 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)

Какое решение будетэта проблема?

1 Ответ

0 голосов
/ 04 октября 2018

Посмотрите, что ваш код делает при первом прохождении цикла:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...