Matlab、fread和sscanf用于读取前缀整数
我知道这类问题以前已经讨论过很多次了,但我似乎错过了如何在我的案例中正确解决它 我有一些带有数十万行前缀整数的txt文件。每行有3个整数,每个整数的前缀为单个字符,如a、B或C:Matlab、fread和sscanf用于读取前缀整数,matlab,Matlab,我知道这类问题以前已经讨论过很多次了,但我似乎错过了如何在我的案例中正确解决它 我有一些带有数十万行前缀整数的txt文件。每行有3个整数,每个整数的前缀为单个字符,如a、B或C: A25723B520C4 A25732B477C4 A25742B432C5 A25752B385C10 A25763B340C10 我想让Matlab将整个txt文件读入内存,并使用sscanf给我一个包含3列的矩阵,行数与txt文件中的行数相同 如果我使用textscan(虽然它给了我一个单元格数组),我可以让它
A25723B520C4
A25732B477C4
A25742B432C5
A25752B385C10
A25763B340C10
我想让Matlab将整个txt文件读入内存,并使用sscanf
给我一个包含3列的矩阵,行数与txt文件中的行数相同
如果我使用textscan
(虽然它给了我一个单元格数组),我可以让它工作,但是我想看看sscanf
是否会快一点-但是,我似乎无法从sscanf
获得正确的输出。在这种情况下,有人能告诉我如何基于sscanf
编写一个实现吗
根据textscan
,以下是我的资料:
fid=fopen('sampleData.txt','r');
s = fread(fid,'*char')';
fclose(fid);
data = textscan(s,'%*c %d %*c %d %*c %d');
谢谢,
Christian以下是我用
sscanf
做的事情。让我们像以前使用fopen
和fclose
一样读入文本文件。之后,我们可以使用sscanf
查找6令牌序列:
一个字符,后跟一个数字,后跟一个字符,后跟一个数字,后跟一个字符,然后再后跟一个数字
根据您上面给出的示例,这就是您将使用sscanf
执行的操作
data = sscanf(s, '%c%d%c%d%c%d\n');
最后需要\n
分隔符,因为有一行新行分隔每行数据。现在,如果您显示数据
,它看起来是这样的:
data =
65
25723
66
520
67
4
65
25732
66
477
67
4
65
25742
66
432
67
5
65
25752
66
385
67
10
65
25763
66
340
67
10
您将看到字符(A、B或C)已转换为其ASCII等价物。但是,这些数字已成功解析。按照文本文件中的约定,可以看到A、B或C后面的数字位于文本文件的偶数位置。例如,A数字从位置2开始,您需要跳过6才能转到A的下一个数字,因为我们在一行中读取了6个内容。对于B数字,我们从位置4开始,对于C数字,我们从位置6开始
因此,下面是我分解数据并最终将所有数字放入单个矩阵的方法
lengthData = length(data);
Acol = data(2:6:lengthData);
Bcol = data(4:6:lengthData);
Ccol = data(6:6:lengthData);
dataMatrix = [Acol Bcol Ccol];
。。。这就是我得到的:
dataMatrix =
25723 520 4
25732 477 4
25742 432 5
25752 385 10
25763 340 10
你能把那个文本文件发到什么地方吗?我有一个可能的解决方案,但我想看看它是否能与实际数据一起工作。当然!美好的谢谢给我一点时间,谢谢你的调查!我现在要走了,但稍后会回来的……完成了。检查我的答案。