extract.R 3.9 KB
Newer Older
louis_heraut's avatar
louis_heraut committed
library(here)
library(tools)
source(file.path(dirname(here()), 'init.R'))


# Extraction of data
extract_data = function (filedir, filename) {
    
    data_path = file.path(computer_data_path, filedir, filename)

    data = read.table(data_path,
                      header=TRUE,
                      na.strings=c('-99.000', '-99'),
                      sep=';',
                      skip=41)[,1:2] 

    return (data=data)
}

# data = extract_data('', 'H5920011_HYDRO_QJM.txt')


# Extraction of information
extract_info = function (filedir, filename) {
    
    data_path = file.path(computer_data_path, filedir, filename)

    # 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')

    data_path = file.path(computer_data_path, filedir, filename)

    infotxt = c(readLines(data_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))]
                )
 
    return (info=info)
}

# info = extract_info('', 'H5920011_HYDRO_QJM.txt')


# Extraction and dataframing
extract_df = function (filedir, filename) {
    
    if (filename == 'all') {
        filelist = c()
        for (f in list.files()) {
            if (file_ext() == 'txt') {
               filelist = c(filelist, f) 
            }
            
        }
    }
    
    data_path = file.path(computer_data_path, filedir, filename)
    info = extract_info(filedir, filename)
    df = data.frame(info, data_path=data_path)
    
    return (df)
}

# df = extract_df('', 'H5920011_HYDRO_QJM.txt')