Skip to content
Snippets Groups Projects
Select Git revision
  • d57d4d9ef4961886d903f76257fe1affbd4f3136
  • main default protected
2 results

lies_konfiguration.R

Blame
  • lies_konfiguration.R 10.79 KiB
    #' lies_konfiguration.R
    #' 
    #' Konfigurationsdatei lesen, Indexdateien lesen, zusätzliche Indizes erzeugen
    #' 
    
    # (das später durch ein schnelleres .rda ersetzen)
    # load ("index/index.rda")
    
    # Konfiguration auslesen und in Variablen schreiben
    #
    # Generiert für jede Zeile die genannte Variable mit dem Wert value
    #
    # Derzeit erwartet das Programm: 
    # - wahl_name - Name der Wahl; für "ltwhe23" leer lassen 
    # - stimmbezirke_url - URL auf Ergebnisdaten
    # - kandidaten_fname - Dateiname der Kandidierenden-Liste (s.u.)
    
    # - parteien_fname - Index aller kandidierenden Parteien mit Langnamen und Farbwert
    
    # - datawrapper_fname - Dateiname für die Datawrapper-Verweis-Datei
    
    #' 
    
    
    # Falls der Parameter wahl_name noch nicht definiert ist, 
    # setze ihn erst mal auf das derzeitige Verzeichnis. 
    if (exists("wahl_name")) {
      index_pfad = paste0("index/",wahl_name,"/")
      if (!dir.exists(index_pfad)) {
        index_pfad <- "index/"
      }
    } else {
      index_pfad <- "index/"
    }
    
    if (!exists("TEST")) TEST <- FALSE
    # Lies die Indexdatei aus dem Verzeichnis wahl_name. 
    # Falls keines angegeben: aus dem aktuellen Verzeichnis
    if (TEST) {
      config_df <- read.xlsx(paste0(index_pfad,"config_test.xlsx"))
    } else {
      config_df <- read.xlsx(paste0(index_pfad,"config.xlsx"))
    }
    for (i in c(1:nrow(config_df))) {
      # Erzeuge neue Variablen mit den Namen und Werten aus der CSV
      assign(config_df$name[i],
             # Kann man den Wert auch als Zahl lesen?
             # Fieses Regex sucht nach reiner Zahl oder Kommawerten.
             # Keine Exponentialschreibweise!
             ifelse(grepl("^[0-9]*\\.*[0-9]+$",config_df$value[i]),
                    # Ist eine Zahl - wandle um
                    as.numeric(config_df$value[i]),
                    # Keine Zahl - behalte den String
                    config_df$value[i]))
    }
    
    lies_daten <- function(index_pfad = index_pfad, fname) {
      fname = paste0(index_pfad, fname)
      if (toupper(str_extract(fname,"(?<=\\.)[A-zA-Z]+$")) %in% c("XLS","XLSX")) {
        # Ist offensichtlich eine Excel-Datei. Lies das erste Sheet.
        return(read.xlsx(fname))
      } else {
        # Geh von einer CSV-Datei aus.
        # Schau in die erste Zeile und zähle Kommas vs. Semikolons
        first_line <- readLines(fname, n = 1)
        commas <- str_split(first_line, ",") %>% unlist() %>% length()
        semicolons <- str_split(first_line, ";") %>% unlist() %>% length()
        if (commas > semicolons) {
          return(read_csv(fname))
        } else {