Используйте dlmread
, чтобы прочитать содержимое вашего текстового файла в некоторый массив, скажем, A
. Это работает, так как у вас есть только числовые значения здесь. Предостережение: из документации, начиная с MATLAB R2019a:
dlmread
не рекомендуется. Вместо этого используйте readmatrix
.
Затем просто используйте правильную команду struct
для нескольких полей и значений, например:
A = dlmread('data.txt')
myStruct = struct('X', A(:, 1), 'Y', A(:, 2), 'Z', A(:, 3), 'A', A(:, 4), 'B', A(:, 5))
Этоприводит к такому выводу (сокращенно):
A =
1.70000 5.50000 -3.62000 0.60000 10.30000 0.00000
1.00000 5.50000 -3.21000 0.90000 12.40000 0.00000
1.20000 5.90000 -3.25000 0.50000 13.90000 0.00000
1.30000 5.50000 -3.19000 0.90000 15.90000 0.00000
1.00000 5.20000 -3.13000 0.30000 17.40000 0.00000
1.70000 5.90000 -3.07000 0.50000 19.60000 0.00000
2.50000 5.50000 -3.01000 0.90000 20.90000 0.00000
2.50000 5.20000 -3.95000 0.40000 22.90000 0.00000
myStruct =
scalar structure containing the fields:
X =
1.7000
1.0000
[...]
Y =
5.5000
5.5000
[...]
Z =
[...]
A =
[...]
B =
[...]
Надеюсь, это поможет!
РЕДАКТИРОВАТЬ: Я тестировал вышеуказанный код с Octave 5.1.0, и так как ондо сих пор остается неясным, если показанный код полностью совместим с MATLAB, вот еще одно решение, использующее textscan
, как также предлагается в Комментарий Неснижаемого лица :
fid = fopen('data.txt');
C = textscan(fid, '%f %f %f %f %f %*[^\n]')
myStruct = struct('X', C{1}, 'Y', C{2}, 'Z', C{3}, 'A', C{4}, 'B', C{5})
fclose(fid);
Трейлинг %*[^\n]
в спецификаторе формата должен игнорировать все остальные символы после последнего %f
.