matlab - 在Matlab中读取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

感谢您的帮助。

最佳答案

我不确定“文本文件可能还有其他内容”是什么意思。这是否意味着整行可能会被丢弃,或者行中可能存在非数字文本也包含数字?

在任何情况下,如果变量 line 是逗号分隔的整数字符串,您可以将它们放入数组中,并使用 sscanf(模数)提取交替的元素对运算符和逻辑索引:

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

关于matlab - 在Matlab中读取2个数字并跳过2个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18028419/

相关文章:

MATLAB 子图标题和轴标签

MATLAB 数字循环

matlab - 在数据集上应用 SVM

matlab - 三重加权总和

尽管持有,Matlab 在回调中打开新图

c++ - 在 OpenCV 中将一些行从一个矩阵复制到另一个矩阵的最快方法

c - MATLAB 到 C 代码

python - 用 Numpy 解释 Matlab 索引/切片

MATLAB:VideoReader 错误检查

matlab - 如何在Linux终端中使用MCR(Matlab编译器运行时)运行Matlab文件?