我正在尝试使用fgets
逐行读取文件中的数据。
我有几行这种格式 -
0.0000 -0.5808 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
每个之间的空格是可变的。
str=fgets(fid)
使用这个我得到整个字符串。我想从这一行中提取信息并更改值。例如,我想改变前两个float
值并说出倒数第二个整数。所以改变后这将是是我的新行 -
0.4500 9.5808 0.0000 F 0 0 0 0 0 0 0 0 0 0 6 0
执行此操作的一种方法是逐个字符地遍历字符串,获取spaces
之间的值,将它们转换为float
或integer
并将其替换为字符串。我想知道是否有其他方法可以在不遍历整个字符串的情况下提取信息。因为字符串的格式总是相同的 - 三个浮点值后跟一个字符后跟12个整数。是否有某些方法我可以访问这些元素直接?
编辑 - 确切地说,我可以在c
中执行以下操作。这很简单 -
sscanf(str,"%f %f %f %c %d %d ",&a,&b,&c,&d,&e,&f);
所以,通过这个我可以轻松地想要我想要的东西。所以,在matlab中有这样的东西吗?
答案 0 :(得分:1)
为此目的使用textscan
。检查here
在你的情况下,你可以做这类事情 -
A = textscan(str,'%.4f %.4f %.4f %c %d %d %d %d %d %d %d %d %d %d %d %d');
您将获得1X16
单元格。您可以使用A{i}
访问任何元素。例如,要让角色执行此操作 -
ch=char(A{4});
同样,您可以访问任何元素而无需遍历整个字符串。
答案 1 :(得分:0)
你应该避免使用Matlab中的循环或whiles。尝试使用一行句子利用矩阵语法。
在这种情况下,不要使用fgets读取文件,而是直接使用textscan来读取文件。
C = textscan(fileID,formatSpec)
如果Matlab中有专门的命令,请避免使用与c相同的命令。它通常具有更好的性能