Commit b5f53430 authored by Emil Bordin's avatar Emil Bordin
Browse files

Aufgabe 2 fertig gestellt und 3 angefangen

parent 2810d677
Loading
Loading
Loading
Loading
+118 −0
Original line number Diff line number Diff line
@@ -340,3 +340,121 @@ conditional_save_downloads <- function(subfolder, jobs, refid_active_jobs = NULL
jobs <- download_all_jobs("Daten", "Stuttgart", 100)
refid_active_jobs <- c("12345", "67890") # Beispiel-IDs
conditional_save_downloads("00_jobs_searchterm", jobs, refid_active_jobs, "daten")

#Task 3----
#Task 3: a----

library(readr)

# Hilfsfunktion zum Laden und Verarbeiten von Daten
load_job_data <- function(filepath) {
  read_csv(filepath)
}

# Funktion zum Ermitteln der aktuell aktiven Jobs
get_active_jobs <- function(subfolder) {
  # Alle Dateien im Unterordner auflisten
  files <- list.files(subfolder, full.names = TRUE)
  
  # Dateien nach Datum sortieren (Annahme: Dateinamen enthalten das Datum im Format YYYY-MM-DD)
  files_sorted <- files[order(sapply(files, function(x) as.Date(sub(".(\\d{4}-\\d{2}-\\d{2})..csv", "\\1", basename(x)))))]
  
  # Den aktuellsten vollständigen Datensatz finden (Annahme: Dateinamen enthalten "full" für vollständige Datensätze)
  full_data_files <- grep("full", files_sorted, value = TRUE)
  latest_full_data <- tail(full_data_files, 1)
  
  # Alle inkrementellen Dateien nach dem vollständigen Datensatz filtern, exklusive der heutigen Datei
  incremental_files <- files_sorted[files_sorted > latest_full_data]
  incremental_files <- incremental_files[!grepl(Sys.Date(), incremental_files)]
  
  # Vollständigen Datensatz laden
  active_jobs_df <- load_job_data(latest_full_data)
  
  # Über inkrementelle Dateien iterieren und Daten aktualisieren
  for (file in incremental_files) {
    incremental_data <- load_job_data(file)
    active_jobs_df <- bind_rows(active_jobs_df, incremental_data)
  }
  
  # Liste der Job-Referenz-IDs extrahieren
  active_job_ids <- active_jobs_df$job_reference_id
  
  return(active_job_ids)
}

# Testen der Funktion mit Beispieldaten (dieser Abschnitt ist für die lokale Testumgebung)
# Verzeichnis mit Testdaten (anpassen auf tatsächlichen Pfad)
test_subfolder <- "01 data/downloads"
test_active_jobs <- get_active_jobs(test_subfolder)
print(test_active_jobs)


#Aufgabe 3a
get_active_jobs <- function(subfolder) {
  today_date <- format(Sys.Date(), "%Y-%m-%d")
  files <- list.files(subfolder, full.names = TRUE, pattern = "\\.csv$")
  
  # Filtern der relevanten Dateien, die nicht von heute sind
  relevant_files <- files[!grepl(today_date, files)]
  
  # Identifizieren der neuesten Full-Datendatei
  full_files <- relevant_files[grepl("_full.csv$", relevant_files)]
  if (length(full_files) == 0) {
    stop("Keine vollständigen Datensätze verfügbar.")
  }
  latest_full_file <- full_files[which.max(file.info(full_files)$mtime)]
  
  # Laden der neuesten Full-Daten
  tryCatch({
    active_jobs <- read_csv(latest_full_file)
    message("Geladene Jobs aus der Full CSV: ", nrow(active_jobs))
  }, error = function(e) {
    stop("Fehler beim Laden der Full-Daten: ", e$message)
  })
  
  # Finden und Verarbeiten von New- und Old-Daten
  new_files <- relevant_files[grepl("_new.csv$", relevant_files)]
  old_files <- relevant_files[grepl("_old.csv$", relevant_files)]
  
  # Hinzufügen und Entfernen von Jobs
  added_jobs <- NULL
  removed_jobs <- NULL
  
  for (file in new_files) {
    new_data <- read_csv(file)
    added_jobs <- bind_rows(added_jobs, new_data)
    active_jobs <- bind_rows(active_jobs, new_data)
  }
  
  for (file in old_files) {
    old_data <- read_csv(file, col_types = cols(refnr = col_character()))
    removed_jobs <- bind_rows(removed_jobs, old_data)
    active_jobs <- active_jobs[!active_jobs$refnr %in% old_data$refnr, ]
  }
  
  message("Original job count: ", nrow(active_jobs))
  message("New jobs added: ", nrow(added_jobs))
  message("Jobs removed: ", nrow(removed_jobs))
  
  list(active_jobs = active_jobs, added_jobs = added_jobs, removed_jobs = removed_jobs)
}

# Festlegen des Pfads und Testen der Funktion
test_subfolder <- "C:/Users/Surface/git/ids_2024_thas_public/01_data/downloads"
result <- tryCatch({
  get_active_jobs(test_subfolder)
}, error = function(e) {
  print(e$message)
})

# Drucken nur der Referenznummern der aktiven Jobs
if (!is.null(result$active_jobs) && "refnr" %in% colnames(result$active_jobs)) {
  print(result$active_jobs$refnr)
} else {
  message("Keine aktiven Jobs verfügbar oder 'refnr' nicht in den Daten gefunden.")
}

# Ausgabe der hinzugefügten und entfernten Job-Referenznummern
print(result$added_jobs$refnr)
print(result$removed_jobs$refnr)