Ошибка 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,' ',' ')
Строка ничего не делает, кроме замены пробела пробелом. не уверен, что вы пытались сделать там.