Ошибка Matlab: неверный вызов strsplit

Я пытаюсь разделить набор из трех чисел из строки. вот мой код:

tline =fgetl(fid);

in_points=fgetl(fid);
B = strrep(in_points,' ',' ')

C = char(strsplit(B));

points = reshape(str2num(C), 3, [])'

Мой входной файл выглядит так:

output 1 for p=0.01

8 8 1 4 15 1 5 17 1 17 17 1 13 1 2 10 3 2 16 4 2 18 6 2 6 3 3 9 3 3 9 7 3 2 13 3 7 18 3 19 20 3 12 4 4 1 6 4 12 10 5 9 12 5 8 19 5 18 4 6 13 9 6 12 16 6 6 8 7 17 12 7 18 6 8 7 15 8 8 8 9 3 19 9 17 19 9 20 2 10 20 4 10 3 8 10 11 7 11 10 12 11 4 14 11 19 3 12 4 11 12 6 11 12 11 13 12 19 14 12 13 15 12 14 18 12 3 19 12 1 3 13 9 9 13 20 10 13 5 13 13 4 17 13 15 16 14 11 18 14 20 3 15 6 13 15 7 16 15 12 17 15 9 1 16 11 1 16 9 5 16 11 12 16 11 16 16 20 19 16 19 13 17 16 16 17 5 19 17 19 1 18 20 10 18 13 16 18 6 1 19 16 4 19 20 7 19 13 11 19 2 19 19 1 6 20 10 14 20 16 15 20 18 16 20 7 20 20

Я хочу разделить числа как

8 8 1

4 15 1

5 17 1

и так далее. Когда я запускаю этот код в октаве, он показывает ошибку. Любая помощь будет оценена.

1 ответ

Твой код мне кажется нормальным, хотя, как упоминалось в комментарии Хоки, возможно, есть более чистый способ сделать это.

Единственная ошибка в том, что вы никогда не читаете в первой строке данных. Первый fgetl Команда читает в вашей строке заголовка. Вторая читает пустую строку между заголовком и вашими данными, вместо того, что вы, вероятно, хотели бы быть in_points

Если вы добавите в другой fgetl между tline а также in_points линии, это сработало для меня.

>> points
points =

 8    8    1
 4   15    1
 5   17    1
17   17    1
13    1    2
10    3    2
16    4    2
18    6    2
 6    3    3
 9    3    3
 9    7    3
 ...

Как упоминал Хоки, B = strrep(in_points,' ',' ') Строка ничего не делает, кроме замены пробела пробелом. не уверен, что вы пытались сделать там.

Другие вопросы по тегам