2014-04-17 82 views
2

我有一些Zip文件{'File1.zip', 'File2.zip', 'File3.zip',..., 'FileN.zip'},其中每個zip文件包含一個Data.csv文件。我想讀取每個Zip文件的'Data.csv'中的數據,而不必提取Zip文件的內容。這可能嗎..?讀取Zip文件中的CSV文件的數據而不用提取Matlab中的內容

+0

您可以使用'unzip'命令提取文件,讀取它,並在以後刪除它,如果不需要它。 – buzjwa

+0

我的想法是,而不是提取或刪除....我們是否可以直接閱讀內容使用actxserver應用程序或Java組件在MATLAB .... –

+0

這是一個想法。您應該編輯問題以包含這種可能的方法。 – buzjwa

回答

2

當然Winzip/7zip/Winrar沒有COM接口組件,可以直接調用,不像word,excel等其他應用程序。

因此@Java爲宜

想法是不實際提取文件,但建立這樣的Windows文件考慮的物理存在(類似於〜tmp文件)

這裏的文件的絕對路徑代碼

zipFilename = 'Ex.zip'; 
zipJavaFile = java.io.File(zipFilename); 

%創建一個Java的ZipFile

zipFile = org.apache.tools.zip.ZipFile(zipJavaFile); 

%從ZipFile中提取條目。

entries = zipFile.getEntries; 
cnt = 1; 

%獲取Zip文件路徑

while entries.hasNext 
    tempObj = entries.nextElement; 
    file{cnt,1} = tempObj.getName.toCharArray'; 
    cnt = cnt+ 1; 
end 

%提取文件名

ind = regexp(file,'$*.csv$'); 
ind = find(~cellfun(@isempty,ind)); % Find Non Empty Cell Index 
file = file(ind); 

%創建絕對路徑,因此,Windows認爲是目錄

file = cellfun(@(x) fullfile('.',x),file,'UniformOutput',false); 

%現在操作File上的任何內容。

+0

它可能是java版本相關的,但我不得不使用'while entries.hasMoreElements'而不是'entries.hasNext'來使它工作。好的伎倆否則。不要忘記在使用後提及** close * java zipfile('zipFile.close'),否則它將被鎖定,直到關閉Matlab。 – Hoki