2017-02-27 7 views
0

私はテキストファイルを読み込もうとしています。日付の列があります。日付列のファイルの一部のフォーマットはDD-MMM-YYYYで、それ以外の場合はDD-MM-YYYYです。私は最初のスタイルを読むようにコードを設定しました。しかし、そのために、2番目の型に実行された場合、コードはファイルを読み取ることができないので停止します。どうすればいいですか?If the textscan doesn't work, try this second wayTextscan - エラーをキャッチして何かを試してみてください

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 

答えて

2
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句で各スタイルをチェックすることをお勧めします。

+0

ありがとうございました。これは機能します。私はそれを読む前に 'if/else'節で日付列の形式をチェックする方法はありますか? – shizishan

+0

@shizishanできません。私は2行目のみを読み、日付文字列を抽出し、その形式を決定することをお勧めします。そのフォームを文字列として保存し、指定されたフォーマットでファイル全体を読み込みます。 – Adriaan

+0

自分で見ることなく日付文字列の形式を決定するにはどうすればよいですか? – shizishan

関連する問題