2

次のような行を含むテキスト ファイルがあります。

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 はすべてのデータをメモリに保持できないため、一度に 1 行ずつ読み取ります。テキスト ファイルには、正規表現を使用して無視する他のテキスト コンテンツも含まれている可能性があります。私の不完全なコードは次のとおりです。

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

ご協力いただきありがとうございます。

4

1 に答える 1