【发布时间】:2015-11-02 20:10:51
【问题描述】:
在 MATLAB 中读取文本文件时,我使用:
file = fopen(filename, 'r');
formatSpec = '%d %d %d %d';
A = fscanf(file, formatSpec, [4 Inf]);
并非每一行都符合 formatSpec 并且可以包含错误消息。现在 Matlab 将停止在与上述格式不对应的行处。
如何跳过格式规范无法匹配的所有行?
所以输入文件看起来像这样:
04 2 1 312
04 2 2 212
04 error
05 2 1 421
应该给我以下矩阵:
04 04 05
2 2 2
1 2 1
312 212 421
【问题讨论】:
-
查看
textscan命令而不是fscanf并尝试使用函数的'EmptyValue'和'TreatAsEmpty'参数。 -
虽然不能真正回答您的问题,但请考虑使用
grep或awk预处理您的输入文件。过去这对我来说效果很好 - 如果您的数据文件很大,那么在 MATBLAB 中处理输入文本可能会对性能产生重大影响(这可能对您的应用程序很重要,也可能不重要),因此只需确保所有数据一开始都是干净的。 -
感谢您的回答,我将研究 textscan。由于我不太擅长使用 grep/awk,我希望在 Matlab 中做到这一点。