我想知道是否有可能读取.csv文件,如下所示:
0,0530,0560,0730,....
90,15090,15290,157....
我应该得到:
0,053 0,056 0,073 0,...
90,150 90,152 90,157 90,...
使用dlmread(path, '')
时,matlab会发出错误说法
Mismatch between file and Format character vector.
Trouble reading 'Numeric' field frin file (row 1, field number 2) ==> ,053 0,056 0,073 ...
我也尝试使用" 0,"作为分隔符,但matlab禁止这样做。
谢谢, jonnyx
答案 0 :(得分:4)
str= importdata('file.csv',''); %importing the data as a cell array of char
for k=1:length(str) %looping till the last line
str{k}=myfunc(str{k}); %applying the required operation
end
,其中
function new=myfunc(str)
old = str(1:regexp(str, ',', 'once')); %finding the characters till the first comma
%old is the pattern of the current line
new=strrep(str,old,[' ',old]); %adding a space before that pattern
new=new(2:end); %removing the space at the start
end
和 file.csv :
0,0530,0560,073
90,15090,15290,157
<强>输出:强>
>> str
str=
'0,053 0,056 0,073'
'90,150 90,152 90,157'
答案 1 :(得分:3)
您实际上可以使用textscan
执行此操作,无需任何循环并使用一些基本的字符串操作函数:
fid = fopen('no_delim.csv', 'r');
C = textscan(fid, ['%[0123456789' 10 13 ']%[,]%3c'], 'EndOfLine', '');
fclose(fid);
C = strcat(C{:});
output = strtrim(strsplit(sprintf('%s ', C{:}), {'\n' '\r'})).';
使用示例输入文件输出:
output =
2×1 cell array
'0,053 0,056 0,073'
'90,150 90,152 90,157'
format string指定从文件中重复读取的3个项目:
每组3个项目为concatenated,然后所有集合均以空格分隔printed to a string。任何换行符或回车符的string is split都会返回以创建字符串的单元格数组,并且末尾的任何空格都为removed。
答案 2 :(得分:2)
如果您可以访问GNU / * NIX命令行,我建议您在进入matlab之前使用sed
预处理您的数据。在这种情况下,命令是sed 's/,[0-9]\{3\}/& /g'
。
$ echo "90,15090,15290,157" | sed 's/,[0-9]\{3\}/& /g'
90,150 90,152 90,157
$ echo "0,0530,0560,0730,356" | sed 's/,[0-9]\{3\}/& /g'
0,053 0,056 0,073 0,356
另外,您可以轻松地将逗号,
更改为小数点.
$ echo "0,053 0,056 0,073 0,356" | sed 's/,/./g'
0.053 0.056 0.073 0.356