string - 在 MATLAB 中高效使用 sscanf

标签 string matlab scanf

我有一个包含数千个字符的字符串,这意味着其中大约有 300 列由空格分隔。一些列是字符串,大多数是整数/ float 。问题是我只需要读取几列,例如第一列、第 5 列、第 37 列、第 117 列和第 152 列,而忽略字符串的其余部分。我在 MATLAB 中使用 sscanf 看到它的唯一方法是做类似的事情

mystring = '245    0.00000000 2456171.50000000  1030492816.000    5.14501001           1     IG      5     -1.188022   ....   5.032154 90';
params = sscanf(mystring, '%f %*f %*f %f %*f %f %*s %f %*f ... %f %*[^\n]')'];

这对我来说似乎完全荒谬,因为如果我想阅读第 152 列,我至少需要 %f%*f 152 次。所以我的问题是在 MATLAB 中使用 sscanf 最有效的方法是什么?如果我能找到一些健壮且易于更改的东西,那将是惊人的。例如,如果明天我决定我只需要第一列、第五列和第一百列,其中我需要的列总数和列本身都发生了变化,那么应该很容易指定。如果工作太多,不用担心。有什么技巧吗?

整个字符串混合了 float 和字符串,但我需要的列始终只是 float /整数,MATLAB 将其作为 double 值返回给 params。提前致谢!

最佳答案

您可以使用 strsplit 拆分您的字符串,然后访问您感兴趣的数组元素。

mystring = '245    0.00000000 2456171.50000000  1030492816.000    5.14501001           1     IG      5     -1.188022   ....   5.032154 90';
split = strsplit(mystring);

如果您的 MATLAB 版本太旧且未包含 strsplit,则可以从 MATLAB central 下载。

然后您可以使用 str2numstr2double 将您感兴趣的每个字符串转换为一个数字。

col5 = str2double(split(5));
% or
mycols = str2double(split([5 37 117]));

strsplit reference
str2num reference
str2double reference

关于string - 在 MATLAB 中高效使用 sscanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20211674/

相关文章:

C:从标准输入扫描

scanf时与char数组混淆

java - 使用正则表达式拆分字符在java中返回一个空值

c - 当我们可以在函数内部使用 strlen() 来获取单词的长度时,为什么我们将字符串的长度作为参数发送给函数?

matlab - 将类别值快速扩展到矩阵中的归一化特征向量行

user-interface - Matlab:类似于 "relative"位置与 uicontrol/axis;调整大小时保持固定边距

c - scanf() 将换行符保留在缓冲区中

java - 读取字符串直到出现整数

string - 将 Spark 数据帧字符串列拆分为多个列

Matlab,在图形中设置字体