使用Textscan读取多行的问题

时间:2014-06-02 22:49:03

标签: matlab import ascii textscan

我使用Matlab对数据导入有点新意。 基本上,我有一个Ascii文件。它有13个标题行,以及765列和~3500行数据。我试图在Matlab中将数据导入3500 x 765矩阵。我尝试了以下内容:

fileID = fopen('filename');
formatspec = [repmat('%f ', [1,765])];
raw_data=textscan(fileID,formatspec, 'Headerlines',13,'delimiter','\t');

它成功跳过了13个标题行。但是,它只给我一个1 x 765矩阵,只包含第一行的数据。

也许我误解了我应该如何使用文本扫描,所以获得我的其他~3499行数据的任何帮助都将非常受欢迎。

〜谢谢

数据文件本身的格式如下。前13行不包含数据本身。其后的所有行都包含类似于下面将粘贴的数据集,扩展700多列和3000多行。

Wyko ASCII数据文件格式0 1 1

X Size 3571

Y尺寸765

块名称类型长度值

波长7 4 72.482628

Aspect 7 4 1

Pixel_size 7 4 0.00196

StageY 7 4 -0.048055

放大8 8 5.05

StageX 7 4 0.214484

ScannerPosition 7 4 3490.000732

ScannerSpeed 7 4 3.165393

RAW_DATA 3 10927260

-10976.61035 -10977.07324 -10981.07422 -10985.6084 ...

-10967.41309 -10963.31836 -10966.75195 -10980.40723 ...

-10969.08496 -10976.03711 -10976.62988 -10964.23731 ...

-10974.12695 -10976.61133 -10979.2627 -10973.57813 ...

-10969.21094 -10966.56543 -10973.74512 -10983.41797 ...

-10970.18359 -10980.82715 -10968.00195 -10975.58594 ...

-10980.41016 -10982.39356 -10982.74316 -10974.51563 ...

-10972.31641 -10984.00488 -10987.89453 -10976.23633 ...

1 个答案:

答案 0 :(得分:0)

我认为以下内容应该可行,但我没有在这台机器上安装Matlab来测试它。

 fileID = fopen('filename');
 formatspec = [repmat('%f ', [1,765])]; 
 raw_data = new_data = textscan(fileID,formatspec, 'Headerlines',13,'delimiter','\t');

 while ~feof(fileID)
    new_data = textscan(fileID,formatspec,'delimiter','\t');
    raw_data = [raw_data; new_data]; 
 end

 fclose(fileID);

请注意,这不是一种特别有效的方法。如果标题行给出了数组的大小,则可能需要使用零来创建适当大小的数组,然后将数据读入数组。