我有一个文本文件,其中包含以下行:
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无法将所有数据保存在内存中,因此我一次只读取一行。文本文件也可能有一些其他文本内容,我使用regexp忽略。我的不完整代码如下:
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
我也尝试过文本扫描,但没有得到理想的结果。我想要以下输出:
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
感谢您的帮助。
答案 0 :(得分:3)
我不确定你的意思是“文本文件也可能包含其他一些内容”。是否意味着可以丢弃整行,或者在包含数字的行中可能存在非数字文本?
在任何情况下,如果变量line
是一个逗号分隔的整数字符串,您可以将它们放入一个数组中,并使用sscanf
,模数运算符和逻辑索引提取备用元素对:< / p>
numbers = sscanf(line, '%d,');
output = numbers(mod(0:length(numbers)-1, 4) < 2);