将数据从.cnv文件导入matlab
我正试图从.cnv文件中读取一些数据。我可以通过以下方式打开文件:将数据从.cnv文件导入matlab,matlab,import,Matlab,Import,我正试图从.cnv文件中读取一些数据。我可以通过以下方式打开文件: TopFolder = 'Name_of_my_file'; SubFolder = dir(fullfile(TopFolder,'*.cnv')); fid = fopen(fullfile(TopFolder,SubFolder{i})); 所有数据都位于字符串结尾之后,该字符串结尾位于其他标题的单独一行上。我想导入存储在该字符串后面的行中的数据。如何做到这一点 例如,.cnv文件的a部分如下所示: # datcnv_i
TopFolder = 'Name_of_my_file';
SubFolder = dir(fullfile(TopFolder,'*.cnv'));
fid = fopen(fullfile(TopFolder,SubFolder{i}));
所有数据都位于字符串结尾之后,该字符串结尾位于其他标题的单独一行上。我想导入存储在该字符串后面的行中的数据。如何做到这一点
例如,.cnv文件的a部分如下所示:
# datcnv_in = D:\data\110606_000.hex D:\instrument software\Seabird 2010-07\Seabird Con Files\SBE19_2108_ScufaTOBS.con
# datcnv_skipover = 0
# file_type = ascii
*END*
-0.051 0.0312 15.4328 138.1551 0.0000 0.0000 0.0000 0.0000 0.000e+00
-0.033 0.0305 15.4277 138.1551 0.0000 0.0000 0.0000 0.0000 0.000e+00
所以,我想在结束之前避免这些台词
也许第一步是找到END的行号?如何执行此操作?在matlab中使用导入向导时,可以指定标题行数。 如果将其设置为4,则在本例中应该可以使用 使用导入向导后,如果您希望将来自动执行该过程,可以让它生成代码。尝试以下操作:
L = '';
while isempty(findstr(L,'*END*')) % if the line doesn't contain *END* => read a new line
L = fgetl(fid); % read next line of file
end
a = fscanf(fid,'%g %g %g %g'); % add as many %g as columns in your data
fclose(fid);
我已经添加了一些关于如何工作的评论。基本上,它逐行读取打开的文件,直到找到一行包含*END*
如果有多行可能包含相同的字符,则可以使用strcmp(L,“*END*”)
警告:此代码假定您正在读取的文件至少包含一行具有
*END*
字符,如果不包含,则在尝试读取超出EOF的内容时将出错
希望这能有所帮助。首先打开文件,搜索所有行,直到找到“结束” 接下来将数据逐行读取到矩阵中(
data
):
如果能够做到这一点,而不必指定标题行的数量,也就是说,可以通过指定数据从字符串结尾后的行开始来实现这一点。我想有一种更精确的方法,但解决方案可能是:将整个文件作为文本导入,找到结尾,从顶部剪切,请你解释一下脚本的第一部分是如何工作的。虽然这样做很好,但我不明白怎么做!如果Linechk初始等于0,那么在while循环之后它怎么可能等于1?另外,“Linechk”有什么用途?代码的其余部分不使用该变量?Linechk变量不一定是必需的。我认为这会使遵循代码变得更容易。如果找到“END”序列,则它本质上是一个==1的标志。我已经更新了答案以删除变量。
fid = fopen('yourfile.cnv') % open file to read
fseek(fid,0,-1); % set read position to beginning of file
while strcmp(fgetl(fid),'*END*') == 0 end % go through lines until '*END*'
n=1;
while 1
tline = fgetl(fid) % read in line
if ~ischar(tline), break, end % if eof, break and finish
data(:,n) = sscanf(tline,'%f') % put numbers in a matrix (in columns)
n=n+1
end
fclose(fid) % close file