2013-08-03 14 views
1

我有有這樣的行的文本文件:閱讀2號和跳過2號在Matlab

206,8,157,8,118,8,205,8,151,8,160,8,126,8,244,8,139,8,166,8,164,8,154,8,177,8,118,8,161,8,180,8,201,8,156,8

我想讀的最初2號,跳過接下來的2號,看了下2數字等等放入一個數組中。由於文本文件很大,Matlab不能將所有數據保存在內存中,所以我一次只讀一行。該文本文件也可能有一些其他文本內容,我忽略了使用正則表達式。我的不完整的代碼如下:

fileID = fopen('4.dat'); %Open file 
line= fgets(fileID); %read first line 
testArray=[]; %Temporary array which will be appended to main array 
I=[]; %Main array 

while ischar(line) 
    fromX = regexp(line,'(\d*\,\d*\,){2,}','match'); %Find 2 consecutive numbers delimited by "," 
    fromXMat = cell2mat(fromX); %Convert to matrix 
    fromXMatNum = str2num(fromXMat); %Convert to numbers from string 
    testArray = fromXMatNum(1:2:numel(fromXMatNum)); %Read every 2nd number 
    I = [I,testArray]; %Append to main array 
end 

我也試過textscan,但沒有得到想要的結果。我想要下面的輸出:

Input: 206,8,157,8,118,8,205,8,151,8,160,8,126,8,244,8,139,8,166,8,164,8,154,8,177,8,118,8,161,8,180,8,201,8,156,8, 
Output: 206,8,118,8,151,8,126,8,139,8,164,8,177,8,161,8,201,8 

感謝您的幫助。

回答

2

我不確定你的意思是「文本文件可能還有其他一些內容」。這是否意味着整行可能被丟棄,或者在一行中也可能包含數字的非數字文本?

在如果可變line任何情況下是逗號分隔的整數的字符串,就可以得到他們到一個數組並提取備用元素對與sscanf,模數運算符和邏輯索引:

numbers = sscanf(line, '%d,'); 
output = numbers(mod(0:length(numbers)-1, 4) < 2); 
+0

謝謝非常。這是一個非常優雅的解決方案。 – Sarvavyapi