我仍然是Matlab的新手,但由于某些原因,文档对此没有任何帮助。
我有一个.dat
文件,我希望将其转换为_
行的6列数组(行数会根据生成.dat
文件的程序而变化)。我需要做的是从第1行第2列(x
维度)和第1行第4列(y
维度)获取此数组将用于生成的图像的维度。在Matlab中使用“导入数据”工具时,这可以正常工作:
但是我需要程序自动完成。如果第一行不存在,我很确定我可以使用fscanf
将数据放入数组中,但图像尺寸是必要的。
知道我需要使用什么呢?
答案 0 :(得分: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]
会跳过剩余的一行。