2015-06-03 43 views
0

呃!我收到了以逗号分隔值格式传送的非常大的文本文件。我需要为每个文件建立一个结构来进行数据分析。小菜一碟!我以前做过这个。我很快写了一些代码来构建结构。最终,我发现可能会出现这样一种情况,即数据中的逗号来自真实数据,而不是意味着将数据分开。在离开工作之前我抓到了这个。现在在家工作,我希望能在这里发布解决方案或推荐解决方案。 (以下是我的代码和数据文件示例)。感谢您的帮助,意见,解决方案和/或反馈。由于MatLab - 导入CSV文本文件,其中包含逗号不意味着分开

DATA文件示例(5号线是哪里出了问题开始, 'Bubba1,TTR1' 不应该被分开):

陈,日期,时间,SignalName,模式#,纬度,经度,
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,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,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{:}]; 
+0

我假设的规则是,只有SignalName将非逗号分隔条件? – user1543042

+0

是的,这是正确的。 – MTM

回答

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); 
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 
相关问题