MATLAB中的略读标题
我有一个类似的问题。但我现在尝试的是将.txt格式的文件读入MATLAB。我的问题是标题。很多时候,由于错误,系统重写文件中间的标题,然后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); 这样我
[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
检查了阵列的大小和可用内存?