MatLab - 导入包含逗号的CSV文本文件,而不是要分开

时间:2015-06-03 02:14:46

标签: matlab csv comma

嗯!我收到了一个非常大的文本文件,以逗号分隔的值格式。我需要为每个文件构建一个结构来进行数据分析。小菜一碟!我之前做过这个。我很快写了一些代码来构建结构。最后,我发现可能存在这样的情况:数据具有来自真实数据的逗号,而不是用于分离数据。我在离开工作之前抓住了这个。现在在家工作,我希望通过在这里发布来获得解决方案或推荐的解决方案。 (下面是我的代码和数据文件示例)。感谢您的帮助,意见,解决方案和/或反馈。感谢

数据文件示例(第5行是问题开始的地方,' Bubba1,TTR1'不应该分开):

Chan,Date,Time,SignalName,Mode#,Lat,Long,
01,12 / 12 / 12,01:01:20.234,OFF,0,39.185,-106.85,
01,12 / 12 / 12,01:01:20.345,OFF,0,39.185,-106.85,
01,12 / 12 / 12,01:01:20.445,OFF,0,39.185,-106.85,
01,12 / 12 / 12,01:01:20.545,Bubba1,TTR1,1,39.185,-106.85,
01,12 / 12 / 12,01:01:20.645,Bubba1,TTR1,1,39.185,-106.85,
01,12 / 12 / 02,01:01:20.745,Bubba1,TTR1,1,39.185,-106.85,
01,12 / 12 / 12,01:01:20.845,OFF,0,39.185,-106.85,

我的代码:

clear;clc;
fid = fopen('test.txt');
fileHeader = textscan(fid,'%s',1,'delimiter','\n','headerlines',0);
fileHeader = strread(char(fileHeader{:}),'%s','delimiter',',')';
fileHeader = strrep(fileHeader,' ','');
fileHeaderLength=length(fileHeader);
format = repmat('%s',1,fileHeaderLength);
data = textscan(fid,format,'delimiter',',');
data=[data{:}];

2 个答案:

答案 0 :(得分:0)

我认为这是一个只需要if语句和while循环的情况。 该行末尾的逗号使其更加复杂。

clear;clc;
fid = fopen('test.txt');
fileHeader = textscan(fid,'%s',1,'delimiter','\n','headerlines',0);
fileHeader = strread(char(fileHeader{:}),'%s','delimiter',',')';
fileHeader = strrep(fileHeader,' ','');

data = fileHeader;
line = {''};

while ~isempty(line)
    line = textscan(fid,'%s',1,'delimiter','\n','headerlines',0);
    line = strread(char(line{:}),'%s','delimiter',',')';
    if length(line) > length(fileHeader)
        line = {line{1:3}, strjoin(line(4:end-3), ', '), line{end-2:end}};
    end

    data=vertcat(data, line);
end

fclose(fid);

答案 1 :(得分:0)

将这些行添加到您的代码中:

for k= size(data,1):-1:1
    if strcmp(data{k,2},'')
        data{k-1,4}=[data{k-1,4} ',' data{k-1,5}];
        data{k-1,5}=data{k-1,6};
        data{k-1,6}=data{k-1,7};
        data{k-1,7}=data{k,1};
        data(k,:)=[];
    end
end