Select Git revision
lies_konfiguration.R
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 {