Вот одна попытка. Это немного сложнее из-за (
и )
, которые окружают ваши цифры.
Во-первых, используйте textcan , чтобы прочитать файл. Поскольку, я думаю, вы не знаете, сколько чисел в файле, прочитайте все в одну строку. Также будет работать с несколькими строками:
filename = 'data.csv';
fid = fopen(filename);
content = textscan(fid, '%s');
fclose(fid);
Для этой цели content
теперь немного странный массив cell
(подробности смотрите в документах textscan
). Просто инициализируйте переменную nums
, в которой будут храниться числа, и выполните цикл content
(если вы знаете немного больше о вашем CSV-файле, вы можете предварительно выделить nums
):
nums = [];
for c1 = 1:numel(content{1})
Далееразбивать строку при каждом появлении ,
:
string_list = strsplit(content{1}{c1},',');
Это дает другой массив ячеек. Переберите его, чтобы преобразовать строки в числа (и завершите внешний цикл):
for c2 = 1 : numel(string_list)
nums(end+1) = str2num(string_list{c2});
end
end
Наконец, просто сохраните действительную и мнимую части чисел в отдельных столбцах:
out = [];
out(:,1) = real(nums);
out(:,2) = imag(nums);
и сохраните его в data.out
. Обновление Как вы упомянули точность, вы можете использовать
dlmwrite('data.out', out, 'precision','%.20f');
Однако здесь вам нужно понять представление с плавающей точкой в Matlab. В частности, постарайтесь понять следующее:
>> a = 0.12825663763789857
a =
0.1283
>> fprintf('%.20f\n', a)
0.12825663763789857397
>> eps(a)
ans =
2.7756e-17
Обратите внимание, что можно было бы сделать это без центрирования строк в числа, но способ, описанный выше, позволит вам использовать данные в Matlab вместо простого их сохранения. .