首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Textscan -捕获错误并尝试其他操作

Textscan -捕获错误并尝试其他操作
EN

Stack Overflow用户
提问于 2017-02-27 23:28:08
回答 1查看 164关注 0票数 0

我正在试着读入一堆文本文件。有一个日期列。在日期列的一些文件中,格式是DD-MMM-YYYY,而在另一些文件中,格式是DD-MM-YYYY。我已经将代码设置为读取第一种样式。但正因为如此,如果它遇到第二种类型,代码就会停止,因为它无法读取文件。我该怎么做,If thetextscandoesn't work, try this second way

代码语言:javascript
复制
for n = 1:length(data1{id})
    fname1 = char(data1{id}(n));
    delimiter = '\t';
    startRow = 2;
    formatSpec = '%s%f%f%f%s%s%s%s%{dd-MMM-yyyy}D%s%s%f%f%f%f%f%f%s%s%s%s%s%s%s%s%f%f%[^\n\r]';
    fileID = fopen(fname1,'r');
    dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'EmptyValue' ,NaN,'HeaderLines' ,startRow-1, 'ReturnOnError', false, 'EndOfLine', '\r\n');
    fclose(fileID); % Close the text file.
    PM25_1{id}{n} = table(dataArray{1:end-1}, 'VariableNames', {'MonitorID','POC','Latitude','Longitude','Datum','ParameterName','SampleDuration','PollutantStandard','DateLocal','UnitsofMeasure','EventType','ObservationCount','ObservationPercent','ArithmeticMean','FirstMaxValue','FirstMaxHour','AQI','MethodName','LocalSiteName','Address','StateName','CountyName','CityName','CBSAName','DateofLastChange','DateNum','NumberOfPOCs'});
    clearvars filename delimiter startRow formatSpec fileID dataArray ans;
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-27 23:33:00

代码语言:javascript
复制
try

for n = 1:length(data1{id})
    fname1 = char(data1{id}(n));
    delimiter = '\t';
    startRow = 2;
    formatSpec = '%s%f%f%f%s%s%s%s%{dd-MMM-yyyy}D%s%s%f%f%f%f%f%f%s%s%s%s%s%s%s%s%f%f%[^\n\r]';
    fileID = fopen(fname1,'r');
    dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'EmptyValue' ,NaN,'HeaderLines' ,startRow-1, 'ReturnOnError', false, 'EndOfLine', '\r\n');
    fclose(fileID); % Close the text file.
    PM25_1{id}{n} = table(dataArray{1:end-1}, 'VariableNames', {'MonitorID','POC','Latitude','Longitude','Datum','ParameterName','SampleDuration','PollutantStandard','DateLocal','UnitsofMeasure','EventType','ObservationCount','ObservationPercent','ArithmeticMean','FirstMaxValue','FirstMaxHour','AQI','MethodName','LocalSiteName','Address','StateName','CountyName','CityName','CBSAName','DateofLastChange','DateNum','NumberOfPOCs'});
    clearvars filename delimiter startRow formatSpec fileID dataArray ans;
end

catch

for n = 1:length(data1{id})
    fname1 = char(data1{id}(n));
    delimiter = '\t';
    startRow = 2;
    formatSpec = '%s%f%f%f%s%s%s%s%{dd-MM-yyyy}D%s%s%f%f%f%f%f%f%s%s%s%s%s%s%s%s%f%f%[^\n\r]';
    fileID = fopen(fname1,'r');
    dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'EmptyValue' ,NaN,'HeaderLines' ,startRow-1, 'ReturnOnError', false, 'EndOfLine', '\r\n');
    fclose(fileID); % Close the text file.
    PM25_1{id}{n} = table(dataArray{1:end-1}, 'VariableNames', {'MonitorID','POC','Latitude','Longitude','Datum','ParameterName','SampleDuration','PollutantStandard','DateLocal','UnitsofMeasure','EventType','ObservationCount','ObservationPercent','ArithmeticMean','FirstMaxValue','FirstMaxHour','AQI','MethodName','LocalSiteName','Address','StateName','CountyName','CityName','CBSAName','DateofLastChange','DateNum','NumberOfPOCs'});
    clearvars filename delimiter startRow formatSpec fileID dataArray ans;
end

end

将所有内容包装在一个try/catch块中。如果第一种样式失败,请尝试下一种样式(请注意,我在catch部件中更改了日期格式)。如果您有更多的可能性,您将希望使用if/else子句之类的东西来检查每个样式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42489523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档