Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab、fread和sscanf用于读取前缀整数_Matlab - Fatal编程技术网

Matlab、fread和sscanf用于读取前缀整数

Matlab、fread和sscanf用于读取前缀整数,matlab,Matlab,我知道这类问题以前已经讨论过很多次了,但我似乎错过了如何在我的案例中正确解决它 我有一些带有数十万行前缀整数的txt文件。每行有3个整数,每个整数的前缀为单个字符,如a、B或C: A25723B520C4 A25732B477C4 A25742B432C5 A25752B385C10 A25763B340C10 我想让Matlab将整个txt文件读入内存,并使用sscanf给我一个包含3列的矩阵,行数与txt文件中的行数相同 如果我使用textscan(虽然它给了我一个单元格数组),我可以让它

我知道这类问题以前已经讨论过很多次了,但我似乎错过了如何在我的案例中正确解决它

我有一些带有数十万行前缀整数的txt文件。每行有3个整数,每个整数的前缀为单个字符,如a、B或C:

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

你能把那个文本文件发到什么地方吗?我有一个可能的解决方案,但我想看看它是否能与实际数据一起工作。当然!美好的谢谢给我一点时间,谢谢你的调查!我现在要走了,但稍后会回来的……完成了。检查我的答案。