2015-06-03 71 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 
相關問題