繁体   English   中英

将函数应用于文件夹中不同格式的文件

[英]Applying functions to differently formatted files within a folder

我有一个文件夹,里面装满了文件。 每个文件的最左列是日期。 有些文件有yyyymmdd日期,有些文件有mm/dd/yyyy日期。 我想将函数minutebars1()应用于yyyymmdd类型,将函数minutebars2()应用于mm/dd/yyyy类型。 我尝试使用if语句执行此操作,试图在for循环中通过所有文件,如果textscan使用给定格式成功读取,则应用正确的函数。 但是,下面发布的代码不起作用,给我一个错误文本扫描线的Badly formed format string错误。 该如何正确完成?

% reads all file names
fPath = uigetdir('.', 'Select directory containing CSV files');
if fPath==0, error('no folder selected'), end
fNames = dir( fullfile(fPath,'*.csv') );
fNames = strcat(fPath, filesep, {fNames.name});

% process each file
for i=1:length(fNames)

    fid = fopen(fNames{i},'rt');

    if   textscan(fid, '%i,%d:%d:%*d.%*d,%f,%d,%*c') % minutebars1() for format 1
    minutebars1(fNames{i});
    end

    if   textscan(fid, '%d/%d/%d,%d:%d:%d,%f,%d,%*c') % minutebars2() for format 2
    minutebars2t(fNames{i});
    end

    fclose(fid);

end

将第一行作为字符串读取,并测试它所在的格式fgetl用于读取单行, regexp用于模式测试。

% Get first line of file
fid = fopen(fnames{i}, 'rt');
str = fgetl(fid);
fclose(fid);

% test for pattern mm/dd/yyyy
if(regexp(str, '\d\d/\d\d/\d\d\d\d'))
    minutebars2(fNames{i});
else
    minutebars1(fNames{i});
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM