MatLab - 导入包含不打算分隔的逗号的 CSV 文本文件

MatLab - Importing CSV text file that contains commas not meant to separate

呃!我收到了以逗号分隔值格式发送的非常大的文本文件。我需要为每个文件构建一个结构以进行数据分析。小菜一碟!我以前做过这个。我很快写了一些代码来构建结构。最终,我发现可能存在这样一种情况,即数据中有一个来自真实数据的逗号,并不是为了分隔数据。我在下班前发现了这个。现在在家工作,我希望通过在此处发布来得出解决方案或推荐解决方案。 (下面是我的代码和一个数据文件示例)。感谢您的帮助、评论、解决方案和 and/or 反馈。谢谢

DATA FILE EXAMPLE(第 5 行是问题开始的地方,'Bubba1, TTR1' 不应分开):

频道、日期、时间、信号名称、模式#、纬度、经度,
01, 12/12/12, 01:01:20.234, 关闭, 0, 39.185, -106.85,
01, 12/12/12, 01:01:20.345, 关闭, 0, 39.185, -106.85,
01, 12/12/12, 01:01:20.445, 关闭, 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/12, 01:01:20.745, Bubba1, TTR1, 1, 39.185, -106.85,
01, 12/12/12, 01:01:20.845, 关闭, 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{:}];

我认为在这种情况下,您只需要 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);

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

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