library(tools) # General information on station iStatut = c('0'='inconnu', '1'='station avec signification hydrologique', '2'='station sans signification hydrologique', '3'="station d'essai") iFinalite = c('0'='inconnue', '1'="hydrométrie générale", '2'='alerte de crue', '3'="hydrométrie générale et alerte de crue", '4'="gestion d'ouvrage", '5'='police des eaux', '6'="suivi d'étiage", '7'='bassin expérimental', '8'='drainage') iType = c('0'='inconnu', '1'='une échelle', '2'='deux échelles, station mère', '3'='deux échelles, station fille', '4'='débits mesurés', '5'='virtuelle') iInfluence = c('0'='inconnue', '1'='nulle ou faible', '2'='en étiage seulement', '3'='forte en toute saison') iDebit = c('0'='reconstitué', '1'="réel (prise en compte de l'eau rajoutée ou retirée du bassin selon aménagements)", '2'='naturel') iQBE = c('0'='qualité basses eaux inconnue', '1'='qualité basses eaux bonne', '2'='qualité basses eaux douteuse') iQME = c('0'='qualité moyennes eaux inconnue', '1'='qualité moyennes eaux bonne', '2'='qualité moyennes eaux douteuse') iQHE = c('0'='qualité hautes eaux inconnue', '1'='qualité hautes eaux bonne', '2'='qualité hautes eaux douteuse') # Extraction of information extract_info = function (data_path, filedir, filename) { filename = c(filename) if (all(filename == 'all') | length(filename) > 1) { if (all(filename == 'all')) { filelist = c() filelist_tmp = list.files(file.path(data_path, filedir)) for (f in filelist_tmp) { if (file_ext(f) == 'txt') { filelist = c(filelist, f) } } } else if (length(filename > 1)) { filelist = filename } df_info = data.frame() for (f in filelist) { df_info = rbind(df_info, extract_info(data_path, filedir, f) ) } rownames(df_info) = NULL return (df_info) } filename = filename[1] file_path = file.path(data_path, filedir, filename) infotxt = c(readLines(file_path, n=41)) info = list(code=trimws(substr(infotxt[11], 38, nchar(infotxt[11]))), nom=trimws(substr(infotxt[12], 39, nchar(infotxt[12]))), territoire=trimws(substr(infotxt[13], 39, nchar(infotxt[13]))), L93X=as.numeric(substr(infotxt[16], 38, 50)), L93Y=as.numeric(substr(infotxt[16], 52, 63)), surface=as.numeric(substr(infotxt[19], 38, 50)), statut=iStatut[trimws(substr(infotxt[26], 38, 50))], finalite=iFinalite[trimws(substr(infotxt[26], 52, 56))], type=iType[trimws(substr(infotxt[26], 58, 58))], influence=iInfluence[trimws(substr(infotxt[26], 60, 60))], debit=iDebit[trimws(substr(infotxt[26], 62, 62))], QBE=iQBE[trimws(substr(infotxt[26], 72, 72))], QME=iQME[trimws(substr(infotxt[26], 74, 74))], QHE=iQHE[trimws(substr(infotxt[26], 76, 76))] ) df_info = data.frame(info, file_path=file_path) return (df_info) } # df_info = extract_info( # "/home/louis/Documents/bouleau/INRAE/CDD_stationnarite/data", # '', # c('H5920011_HYDRO_QJM.txt', 'K4470010_HYDRO_QJM.txt')) # Extraction of data extract_data = function (data_path, filedir, filename) { filename = c(filename) if (all(filename == 'all') | length(filename) > 1) { if (all(filename == 'all')) { filelist = c() filelist_tmp = list.files(file.path(data_path, filedir)) for (f in filelist_tmp) { if (file_ext(f) == 'txt') { filelist = c(filelist, f) } } } else if (length(filename > 1)) { filelist = filename } df_data = data.frame() for (f in filelist) { df_data = rbind(df_data, extract_data(data_path, filedir, f) ) } rownames(df_data) = NULL return (df_data) } filename = filename[1] file_path = file.path(data_path, filedir, filename) df_data = read.table(file_path, header=TRUE, na.strings=c(' -99'), sep=';', skip=41)[,1:2] df_info = extract_info(data_path, filedir, filename) code = df_info$code df_data = cbind(df_data, code=code) return (df_data) } # df_data = extract_data( # "/home/louis/Documents/bouleau/INRAE/CDD_stationnarite/data", # '', # c('H5920011_HYDRO_QJM.txt', 'K4470010_HYDRO_QJM.txt'))