read date from character string

조회 수: 13 (최근 30일)
pruth
pruth 2015년 11월 5일
댓글: pruth 2015년 11월 5일
hi... i have data files(HDF5 format) ... in different sub folders. there are around 50,000 files. i have made a program to pick all HDF5 files from all subfolders and read. there is date and time in thair names which i want read. file names are like bellow
GOME_O3-NO2-NO2Tropo-BrO-SO2-H2O-HCHO_L2_20151031233116_051_METOPB_16186_DLR_03.HDF5
GOME_O3-NO2-NO2Tropo-BrO-SO2-H2O-HCHO_L2_20151101001652_051_METOPA_46873_DLR_03.HDF5
GOME_O3-NO2-NO2Tropo-BrO-SO2-H2O-HCHO_L2_20151101011234_051_METOPB_16187_DLR_03.HDF5
GOME_O3-NO2-NO2Tropo-BrO-SO2-H2O-HCHO_L2_20151101015816_050_METOPA_46874_DLR_03.HDF5
GOME_O3-NO2-NO2Tropo-BrO-SO2-H2O-HCHO_L2_20151101025358_051_METOPB_16188_DLR_03.HDF5
GOME_O3-NO2-NO2Tropo-BrO-SO2-H2O-HCHO_L2_20151101033940_050_METOPA_46875_DLR_03.HDF5
datenum(filename(42:56),'yyyymmddHHMMSS'); %% to read date and time from file name
this works fine but problem occurs when name of the file changes .there are few files whose names are different than above.for eg.
GOME_O3-NO2-NO2Tropo-BrO-H2O-HCHO_L2_20070920104919_049_METOPA_04770_DLR_03.HDF5
in this file some characters are missing (-SO2)
when i run a loop it runs properly but when loop find this type of name it stops there and said error. i can not delete this files.hope you understand my question.

채택된 답변

Stephen23
Stephen23 2015년 11월 5일
편집: Stephen23 2015년 11월 5일
This is easy using regexp to match the date substring:
C = {'GOME_O3-NO2-NO2Tropo-BrO-SO2-H2O-HCHO_L2_20151031233116_051_METOPB_16186_DLR_03.HDF5'
'GOME_O3-NO2-NO2Tropo-BrO-SO2-H2O-HCHO_L2_20151101001652_051_METOPA_46873_DLR_03.HDF5'
'GOME_O3-NO2-NO2Tropo-BrO-SO2-H2O-HCHO_L2_20151101011234_051_METOPB_16187_DLR_03.HDF5'
'GOME_O3-NO2-NO2Tropo-BrO-SO2-H2O-HCHO_L2_20151101015816_050_METOPA_46874_DLR_03.HDF5'
'GOME_O3-NO2-NO2Tropo-BrO-SO2-H2O-HCHO_L2_20151101025358_051_METOPB_16188_DLR_03.HDF5'
'GOME_O3-NO2-NO2Tropo-BrO-SO2-H2O-HCHO_L2_20151101033940_050_METOPA_46875_DLR_03.HDF5'
'GOME_O3-NO2-NO2Tropo-BrO-H2O-HCHO_L2_20070920104919_049_METOPA_04770_DLR_03.HDF5'};
D = regexp(C,'\d{14}','match','once');
E = datenum(D,'yyyymmddHHMMSS');
and the output:
>> datevec(E)
ans =
2015 10 31 23 31 16
2015 11 1 0 16 52
2015 11 1 1 12 34
2015 11 1 1 58 16
2015 11 1 2 53 58
2015 11 1 3 39 40
2007 9 20 10 49 19
  댓글 수: 1
pruth
pruth 2015년 11월 5일
hey that was so easy...thank u sir....

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Thorsten
Thorsten 2015년 11월 5일
편집: Thorsten 2015년 11월 5일
This works if there is always the string "_L2_" right before the date:
i1 = strfind(filename, '_L2_')+4;
datenum(filename(i1:i1+14),'yyyymmddHHMMSS');

카테고리

Help CenterFile Exchange에서 Dates and Time에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by