2

我对 Matlab 还是很陌生,但由于某种原因,文档对此并没有太大帮助。

我有一个.dat文件,我想将其转换为_一行 6 列数组(行数取决于生成.dat文件的程序)。x我需要做的是从第 1 行第 2 列(维度)和第 1 行第 4 列(维度)中获取该数组将用于制作的图像的y维度。在 Matlab 中使用 Import Data 工具时,它可以正常工作:

在此处输入图像描述

但是我需要程序自动完成。如果第一行不存在,我很确定我可以fscanf用来将数据放入数组中,但图像尺寸是必要的。

知道我需要改用什么吗?

4

1 回答 1

0

您可以使用textscan. 第一次调用此函数将处理第一行(即获取文件的尺寸),第二次调用文件的其余部分。第二个调用用于repmat声明格式规范:%f、含义double、重复nb_col次数。该选项CollectOutput将连接单个数组中的所有列。请注意,textscan无需指定行数即可读取整个文件。

代码是

fileID = fopen('youfile.dat');     %declare a file id

C1 = textscan(fileID,'%s%f%s%f');   %read the first line
nb_col = C1{4};                     %get the number of columns (could be set by user too) 

%read the remaining of the file
C2 = textscan(fileID, repmat('%f',1,nb_col), 'CollectOutput',1);

fclose(fileID);                     %close the connection

在列数固定的情况下,您可以简单地执行

fileID = fopen('youfile.dat');
C1 = textscan(fileID,'%s%f%s%f');   %read the first line
im_x = C1{2};                       %get the x dimension 
im_y = C1{4};                       %get the x dimension 

C2 = textscan(fileID,'%f%f%f%f%f%f%*[^\n]', 'CollectOutput',1);
fclose(fileID);

格式规范%*[^\n]会跳过一行的剩余部分。

于 2013-09-21T22:21:55.453 回答