2013-04-29 124 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