使用Matlab从csv文件中删除不相关的空格

时间:2015-08-10 09:17:51

标签: matlab csv data-import

我正在尝试使用Matlab导入csv文件,其中包含标题和几列。它开始像:

Essai : Taux 1;"1,00000";mm/min
Déformation : Déformation de traction (Déplacement) longueur initiale;"100,00000";mm
Généralités : Date de début;"09/07/2015 17:12"
Généralités : Date de fin;"09/07/2015 17:15"

Temps;Charge;Déplacement traverse
(s);(N);(mm)
"0,00000";"-0,22448";"0,00000"
"0,10000";"2,56269";"0,00093"
"0,20000";"3,84100";"0,00328"
"0,30000";"3,84073";"0,00524"
"0,40000";"4,06938";"0,00648"
...

我可以用xlsread导入它,手动删除标题:

A = xlsread('filename.csv');
B = A(n_headerlines+1:end,:);

它工作正常。但是,当我达到数千时,我的数据中就有不相关的空格:

...
"147,70000";"984,81097";"2,46197"
"147,80000";"998,60400";"2,46318"
"147,89999";"1 020,65094";"2,46489"
"148,00000";"1 043,27832";"2,46694"
...

在导入数据后在A或B中给出NaN。

如何在保留csv格式的同时删除这些空格? 我正在考虑使用strrep,但我无法弄清楚如何在不破坏我的csv文件的格式的情况下。

谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

尝试使用 where consumer in ( select consumer from DPOWER.business_transaction where sla_state = 1 and result=0 ) and (bt.starttime >= '20150701000000000000' and bt.endtime <= '20150801000000000000') 代替[~,~,A]=xlsread(...)

后一个调用仅返回数值,对于任何无法正确转换的内容都使用NaN。由于所有值都超过一千的空格,因此您只能在num-only输出中看到NaN。

前一个调用将包含单元格中的数字数据和文本数据。您可以对文本字符串进行操作以删除空格,然后转换为数字(使用cellfun)。之后,您可以将整个单元格转换为数字数组(使用cell2mat)。

作为最佳做法,我建议在csv文件上使用delimread代替xlsread。您仍然需要删除空格。

答案 1 :(得分:0)

感谢您的帮助

基于Kirby Fears提示,我可以将数据导入单元格,将错误格式化的值导入字符串而不是NaN,然后​​使用strrep。

不知何故,我无法立即替换字符串中的空格(可能是我对1x1单元格而不是字符串进行了操作)。 最后,以下工作:

[a,b,c]=xlsread('filename.csv');
idx_NaN = find(isnan(a)); % A way to track all indexes corresponding to wrong-formatted data. Watch out : linear indexes !
a_without_NaN = a;
for i = 1:size(idx_NaN,1)
    [i_NaN, j_NaN] = ind2sub(size(a),idx_NaN(i));
    char_NaN = c{i_NaN, j_NaN};
    if ~isnan(char_NaN)
        char_NaN = strrep(char_NaN,',','.');
        char_NaN = char_NaN(~isspace(char_NaN));
        a_without_NaN(i_NaN,j_NaN) = str2double(char_NaN);
    end
end

a_without_NaN包含导入的数据,格式令人满意。