在使用readtable函数导入.csv文件时,默认是以逗号为分隔符来分隔各列,我发现如果某个单元格里含有逗号,则会在逗号位置断开,形成两列,这样导入完成后有各列错位的问题发生。我摸索了一种方法,就是把工具栏里“导入数据”工具自动生成的代码,进行适当修改,就能避免因单元格内部内容里有逗号导致各列错位问题。原理不清楚,重在好用,如果大家也遇到类似问题,可以参考。对了,记得手动将第一行数据里的逗号删掉。
主程序:
table_tem1=readtable('数据.csv','Delimiter',",");
v_t = repmat("%s",1,size(table_tem1,2)); %都按字符串数组类型读入
lujing='数据.csv';
num=size(table_tem1,2);
table_tem1=daorutable(v_t,lujing,num);
%这样第一行也能作为内容读入,刚好可以把它附给列名,
% 然后把第一行删掉即可
table_tem1.Properties.VariableNames=string(table2cell(table_tem1(1,:)));
table_tem1(1,:)=[];
% table_tem1即为最终我们导入的table
自定义导入函数:
function y=daorutable(v_t,lujing,num)
%v_t为多个"%s",使得各列都按字符串数组类型读入
%lujing为要读入文件的路径
%num为数据一共有几列
% Set up the Import Options and import the data
opts = delimitedTextImportOptions("NumVariables", num);
% 指定范围和分隔符
opts.DataLines = [1, Inf];
opts.Delimiter = ",";
% 指定列名称和类型
opts.VariableTypes = v_t;
% 指定文件级属性
opts.ExtraColumnsRule = "ignore";
opts.EmptyLineRule = "read";
% 导入数据
y = readtable(lujing, opts);
end