2016-12-30 78 views
0

給定一個CSV文件,它看上去像(從Import Tool在MATLAB)導入CSV文件與特定的列中的數據(不包括頭)到MATLAB

enter image description here

一個可以通過使用Import Tool將其導入到MATLAB 。假設有30個這樣的文件具有相同的列數但可能不同的行數。

問題: 如何在MATLAB中實現以下功能?

對於每個文件,加載列2,3,5(全部從第2行開始)作爲單元陣列。


很多有關導入CSV文件數據到MATLAB的問題已經問過。但是對這些相關問題的回答(我發現的最接近的問題是here)對於實現我的具體目標似乎沒有多大幫助。

+0

爲什麼鏈接的答案沒有幫助?這正是你需要做的。加載數據後,您只需刪除不關心的列。 – Suever

回答

1

這將是我的建議:

% Load files with multiselect 
[file,dir,filterIndex] = uigetfile(... 
    {'*.csv', '*.csv'; 
    '*.*', 'All Files (*.*)'}, ... 
    'Pick files',... 
    'Multiselect', 'on'); 

% 'file' will be a cell array of file names if you read more than one file, but 
% it will be a char array if you only read one file. If only one file is 
% chosen, put it into a cell. 
if ischar(file) 
    file = {file}; 
end 

% Loop through all files and use textscan 
n = length(file); 
data = cell(n,1); 
for k = 1:n 
    fid = fopen([dir,file{k}]); 
    data{k} = textscan(fid,'%*s %s %f %*s %s %*[^\n]',... 
     'delimiter',',','HeaderLines',1); 
    fclose(fid); 
end 

的textscan調用上面說:

  1. 經過文件fid
  2. 跳過列1
  3. 款待列2作爲字符串
  4. 將第3列作爲雙重對象
  5. 跳過列4
  6. 款待柱5作爲字符串
  7. 跳過其餘列
  8. 使用逗號分隔符
  9. 忽略第一行

如果加載n文件,變量data將是包含單元矩陣與每個文件數據的nx30單元陣列。

我希望這個幫助。讓我知道是否還有其他事情可以做。

+0

謝謝你的回答。我嘗試了一個.csv文件的代碼,我不知道爲什麼它不起作用。我發佈了一個後續[問題](http://stackoverflow.com/q/41411941/758077)。 – Jack

+0

@Jack,注意上面的編輯。它不適用於單個文件的原因是因爲如果只選擇一個文件,'uigetfile'將在'文件'變量中返回一個char數組。只需將char數組放入單元格中,其餘代碼應該很好。我很抱歉從一開始就沒有考慮到這一點。目前我只有30個檔案。 – JCKaz

1

假設你有文件text.csv主要內容如下:

var1 var2 var3 var4 
dummy 1 London 0.5 
dummy 2 Edinburgh 1.5 
dummy 3 Cardiff 2 
dummy 4 Belfast 2.5 

這可能不是計算最有效的解決方案,但它是非常有效的(這應該被複制到MATLAB腳本並運行):

% Read the data as a table (without reading the column label, otherwise add 
% 'ReadVariableNames',false before the right bracket: 
T = readtable('text.csv','Delimiter',','); 
% Convert the table to a cell: 
C = table2cell(T); 
% Store, say, the 2nd and 3rd columns to another cell. Otherwise you can 
% also convert numeric values to vectors/matrices: 
C2 = C(:,2:3); 

我希望這有助於。如果您有其他問題,請告訴我。如果您需要執行操作,我會建議將數據轉換爲矩陣。

相關問題