MATLAB中的略读标题

MATLAB中的略读标题,matlab,file-io,Matlab,File Io,我有一个类似的问题。但我现在尝试的是将.txt格式的文件读入MATLAB。我的问题是标题。很多时候,由于错误,系统重写文件中间的标题,然后MATLAB无法读取文件。有没有办法跳过它?我知道如果我知道一些字符是什么,我可以跳过阅读 这是我正在使用的代码 [c,pathc]=uigetfile({'*.txt'},'Select the data','V:\data'); file=[pathc c]; data= dlmread(file, ',', 1,4); 这样我

我有一个类似的问题。但我现在尝试的是将.txt格式的文件读入MATLAB。我的问题是标题。很多时候,由于错误,系统重写文件中间的标题,然后MATLAB无法读取文件。有没有办法跳过它?我知道如果我知道一些字符是什么,我可以跳过阅读

这是我正在使用的代码

[c,pathc]=uigetfile({'*.txt'},'Select the data','V:\data');     
file=[pathc c];    
data= dlmread(file, ',', 1,4);    
这样我就可以让用户选择文件。我的文件通常很大[86400 125] 因此,它自然有125个或更多的头字段,这取决于文件

谢谢

因为这些文件太大了,我无法复制,但格式如下

  day      time    col1    col2 col3 col4 ...............................
  2/3/2010  0:10    3.4    4.5   5.6  4.4 ...............................   
..................................................................    
..................................................................   
依此类推,您只能读取数字数据。它不会读取日期和时间,因为前两列包含日期和时间。如果其他数据都是数字,您可以告诉DLMREAD跳过右边的第一行和两列:

data = dlmread(file, ' ', 1,2); 
要同时导入日期和时间,您可以使用它代替DLMREAD:

A = importdata(file, ' ', 1);
dt = datenum(A.textdata(2:end,1),'mm/dd/yyyy');
tm = datenum(A.textdata(2:end,2),'HH:MM');
data = A.data;

日期和时间将转换为序列号。您可以使用函数将它们转换回来。

事实证明,您仍然可以使用textscan。除了你把所有的东西都当作字符串来读。然后,您尝试转换为双精度。”str2double'为字符串返回NaN,由于头都是字符串,所以可以将头行标识为具有所有NaN的行

例如:

%# find and open file
[c,pathc]=uigetfile({'*.txt'},'Select the data','V:\data'); 
file=[pathc c];
fid = fopen(file);

%# read all text
strData = textscan(fid,'%s%s%s%s%s%s','Delimiter',','); 

%# close the file again
fclose(fid);

%# catenate, b/c textscan returns a column of cells for each column in the data
strData = cat(2,strData{:}); 

%# convert cols 3:6 to double
doubleData = str2double(strData(:,3:end));

%# find header rows. headerRows is a logical array
headerRowsL = all(isnan(doubleData),2);

%# since I guess you know what the headers are, you can just remove the header rows
dateAndTimeCell = strData(~headerRowsL,1:2);
dataArray = doubleData(~headerRowsL,:);

%# and you're ready to start working with your data 

你能给出一个文件的例子吗?对于上面的问题,我正在寻找一种让matlab读取我的文件的方法。正如您在上面的代码中看到的,我跳过了标题。我想知道,如果matlab遇到中间的标题行,是否有办法不停止阅读。例如,第1000行左右的标题(现在我不知道它是哪一行,除非我运行)Thankst这就是我要求提供示例的原因。在Jonas的回答中使用文本扫描。你不必使用cellfun进行str2double。只需
doubleData=str2double(strData)将起作用。请检查uigetfile和textscan行中的引号。哦,感谢您找到错误,@yuk。另外,感谢您指出str2double在没有cellfun的情况下也可以工作。我学到了一些新东西。@Jonas:愚蠢的问题。。。哪个是我的矩阵数据?像以前一样,数据包含了所有的值。。另一个主要问题。它的内存不足,所以我甚至无法运行它,我知道我的文件很大,大约60mb@Paul:dataArray包含数字数据,dateAndTimeCell包含日期和时间的相应字符串。我有点惊讶的是,一个60mb的文件竟然会耗尽内存。用
strData
替换
dateAndTimeCell
,用
doubleData
替换
dataArray
(在这种情况下,数字数据将是
doubleData
)。另外,您在尝试该功能之前是否运行了
清除类
?您是否执行了
dbstop if error
,并在RAM耗尽时使用
memory
检查了阵列的大小和可用内存?