2014-07-24 74 views
0

我有一個大約80MB的文本文件。它有2列和6e6左右的行。我想將數據導入到MATLAB中,但是與加載函數有關的數據過多。我一直在玩fopen函數,但不能得到任何工作。將大量數據導入MATLAB?

理想情況下,我想採取第一列數據和導入,並最終在MATLAB中的一個大型數組中。如果這是不可能的,我想分成長度爲34,013的數組。我也想爲第二列數據做同樣的事情。

+0

你試過'[a,b] = textread(filename,'%f%f')'? (假設你的數據是數字的)。 – dpwe

回答

2
fileID = fopen('yourfilename.txt'); 
formatSpec = '%f %f'; 
while ~feof(fileID) 
C = textscan(fileID,formatSpec,34013); 
end 

希望這有助於..

編輯:

您得到錯誤的原因是因爲C有兩列。所以你需要分別拿出這些列並處理它們。

例如:

column1data = reshape(C(:,1),301,113); 
column2data = reshape(C(:,2),301,113); 
+0

This Works。如何獲取34013的捆綁包,並且每次使用col 1和2創建一個301x113的矩陣?重塑功能不斷給我錯誤:已知尺寸的產品,34013,不可分爲總數 元素,2. – Prefoninsane

+0

編輯答案,看看是否有幫助.. – lakesh

+0

hmmmm給我錯誤:RESHAPE數量元素不得改變。 – Prefoninsane

0

您也可以考慮將文件轉換爲二進制格式,如果您的數據文件是不是你想要加載它每次換水。然後你會更快地加載它。 或者您可以在下面的功能中進行「透明二進制轉換」。只有第一次加載數據會很慢。隨後的所有將會很快。

function Data = ReadTextFile(FileName,NColumns) 
    MatFileName = sprintf('%s.mat',FileName); % binary file name 
    if exist(MatFileName,'file')==2    % if it exists 
     S = load(MatFileName,'Data');   % load it instead of 
     Data = S.Data;       % the original text file 
     return; 
    end 
    fh  = fopen(FileName);    % if binary file does not exist load data ftom the original text file 
    fh_closer = onCleanup(@() fclose(fh)); % the file will be closed properly even in case of error 
    Data  = fscanf(fh, repmat('%f ',1,NColumns), [NColumns,inf]); 
    Data  = Data'; 
    save(MatFileName,'Data');     % and make binary "chache" of the original data for faster subsequent reading 
end 

當原始數據文件改變時,不要忘記刪除MAT文件。