2013-04-29 127 views
2

textscan我要读这样Matlab的固定宽度

10001 3   5.0000  30.0   0.0000  25.6   0.0000  10.0 
10002 1   25.0000     0.0000     4.6887  58.2 
10003 5   45.0000  20.0   0.0000     14.7608   
10004 5   65.0000     0.0000     8.8791   
10005 1   85.0000     0.0000     6.3128  00.0 

一个文件,其中该文件格式类似这样的“%5I%5I %% 10.4f%8.1f%10.4f%8.1f%10.4f %8.1f”

我用下面的代码

n_xyz_filename = input('\nSelect the file. ', 's'); 
n_xyz_file = fopen(n_xyz_filename, 'r'); 
n_xyz = textscan(n_xyz_file, '%5i%5i%10.4f%8.1f%10.4f%8.1f%10.4f%8.1f'); 
fclose(n_xyz_file); 

但我一直收到以下错误

???错误使用==> textscan格式不正确的字符串。

我真的不明白!

编辑

作为回答说,正确的代码是:

n_xyz_filename = input('\nSelect the file. ', 's'); 
n_xyz_file = fopen(n_xyz_filename, 'r'); 
n_xyz = textscan(n_xyz_file, '%5d%5d%10.4f%8.1f%10.4f%8.1f%10.4f%8.1f'); 
fclose(n_xyz_file); 

用 “d”(代表十进制),而不是 “我”

+0

您确定该文件是固定宽度,而不是制表符分隔吗?也许尝试''dlmread'与'\ t'作为分隔符? – Dan 2013-04-29 10:04:59

+0

我相信是固定的:我刚刚生成一个字符串。 – 2013-04-29 10:20:29

+0

@Dan:不幸的是它不是'tab'格式。 – fpe 2013-04-29 10:32:38

回答

2

的问题是格式说明符i,它不被textscan识别。如果你想表示一个整数,你应该使用d。正确的语法是:

n_xyz = textscan(n_xyz_file, '%5d%5d%10.4f%8.1f%10.4f%8.1f%10.4f%8.1f'); 
+1

是啊!这几乎完成了! 但现在我还有一个问题:矩阵n_xyz现在显示如下 'n_xyz = [3498x1 int32] [3498x1 int32] [3498x1 double] [3498x1 double] [3498x1 double] [3498x1 double] [3498x1 double] [3497x1双] 和每个组件显示为向量 – 2013-04-29 12:55:37

+0

@MicheleRedaelli没有问题:看起来你的文件包含3498行(显然是8列,就像在格式字符串中指定的那样)。因此每个单元格包含来自相应列的所有提取值。要访问每个单元格,使用花括号('{}'),例如第二列的值是'n_xyz {2}'... – 2013-04-29 14:13:02

+1

非常感谢 您让我的一天! 我讨厌教授要求你做一些没有解释基本的东西! – 2013-04-29 19:46:18