我的问题是,我有以下格式的CSV数据:

1,000333e+003;6,620171e+001
1,001297e+003;6,519699e+001
1,002261e+003;6,444984e+001

我想把数据读入matlab,但是csvread要求用逗号分隔,而且我还没有找到逗号十进制标记的解决方案我想我可以在某种程度上使用textscan
很抱歉问这么简单的问题,但我希望有人能帮忙这里的其他问题/答案似乎都没有涉及逗号和分号的组合。

最佳答案

EDIT3(接受回答):使用主工具栏变量部分的导入数据按钮,可以自定义数据的导入方式完成后,您可以单击箭头下方的导入选择,并生成一个脚本或函数,该脚本或函数将遵循导入数据窗口中定义的相同规则。
--------------------------------------------------留作参考--------------------------------------------------
您可以使用以下格式
M = dlmread(filename,';')
文件名是包含文件完整路径的字符串,除非该文件位于当前工作目录中,在这种情况下,您只需键入文件名即可。
EDIT1:要使用dlmread来代替,下面的代码应该能做到这一点,或者至少大部分都能做到。

%rt is permission r for read t for open in text mode
csv_file = fopen('D:\Dev\MATLAB\stackoverflow_tests\1.csv','rt');

%the formatspec represents what the scan is 'looking'for.
formatSpec = '%s%s';

%textscan inputs work in pairs so your scanning the file using the format
%defined above and with a semicolon delimeter
C = textscan(csv_file, formatSpec, 'Delimiter', ';');

fclose(csv_file);

结果显示。
C{1}{1} =
1,000333e+003
C{1}{2} =
1,001297e+003
C{1}{3} =
1,002261e+003
C{2}{1} =
6,620171e+001
C{2}{2} =
6,519699e+001
C{2}{3} =
6,444984e+001

EDIT2:将逗号替换为点并转换为double类型的整数:
[row, col] = size(C);
for kk = 1 : col
    A = C{1,kk};
    converted_data{1,kk} = str2double(strrep(A, ',', '.'));
end

celldisp(converted_data)

结果:
converted_data{1} =
   1.0e+03 *
    1.0003
    1.0013
    1.0023
converted_data{2} =
   66.2017
   65.1970
   64.4498

08-24 13:19
查看更多