Spaces:
Sleeping
Sleeping
library(shiny) | |
library(readxl) | |
library(stringr) | |
library(openxlsx) | |
library(shinythemes) | |
server <- function(input, output) { | |
# Store the original file content | |
originalFileContent <- reactiveVal(NULL) | |
observeEvent(input$file, { | |
req(input$file) # Read the file content | |
file_type <- switch(input$file_type, | |
"CSV" = "csv", | |
"XLSX" = "xlsx", | |
"TXT" = 'txt') | |
data_sheet <- tryCatch( | |
switch(file_type, | |
"csv" = { | |
sep <- if (input$csv_sep != "Other") input$csv_sep else input$csv_other | |
read.csv(input$file$datapath, sep = sep) | |
}, | |
"xlsx" = { | |
tryCatch( | |
read_xlsx(input$file$datapath, sheet = input$excel_sheet), | |
error = function(e) { | |
showModal(modalDialog( | |
title = "Error", | |
"La hoja de Excel especificada no existe en el archivo subido. Por favor, selecciona una hoja válida.", | |
easyClose = TRUE | |
)) | |
return(NULL) | |
} | |
) | |
}, | |
"txt" = { | |
readLines(input$file$datapath) | |
} | |
), | |
error = function(e) { | |
showModal(modalDialog( | |
title = "Error", | |
"El archivo no se pudo leer. Por favor, verifica que el archivo sea válido y que el tipo de archivo seleccionado sea correcto.", | |
easyClose = TRUE | |
)) | |
return(NULL) | |
} | |
) | |
file_ext <- tools::file_ext(input$file$name) | |
if (tolower(file_ext) != tolower(input$file_type)) { | |
showModal(modalDialog( | |
title = "Error", | |
"The file extension does not match the selected file type. Please select the correct file type or upload a file with the correct extension.", | |
easyClose = TRUE | |
)) | |
return() | |
} | |
email_pattern <- "([_a-z0-9-]+(?:\\.[_a-z0-9-]+)*@[a-z0-9-]+(?:\\.[a-z0-9-]+)*(?:\\.[a-z]{2,63}))" | |
correos <- c() | |
switch(file_type, | |
"csv" = { | |
data_sheet <- read.csv(input$file$datapath, sep = sep) | |
#crete checkbox group | |
output$checkbox_group <- renderUI({ | |
checkboxGroupInput("columns", "Select columns:", choices = names(data_sheet)) | |
}) | |
observeEvent(input$columns, { | |
req(input$columns) | |
for (col_name in input$columns) { | |
correos_raw <- na.omit(as.character(data_sheet[[col_name]])) | |
for (entry in correos_raw) { | |
correos_found <- str_extract_all(entry, email_pattern)[[1]] | |
correos <- unique(c(correos, correos_found)) | |
} | |
} | |
originalFileContent(correos) | |
output$contents <- renderTable({ | |
data.frame(Content = originalFileContent()) | |
}) | |
}) | |
}, | |
"xlsx" = { | |
data_sheet <- read_xlsx(input$file$datapath, sheet = input$excel_sheet) | |
#crete checkbox group | |
output$checkbox_group <- renderUI({ | |
checkboxGroupInput("columns", "Select columns:", choices = names(data_sheet)) | |
}) | |
observeEvent(input$columns, { | |
req(input$columns) | |
for (col_name in input$columns) { | |
correos_raw <- na.omit(as.character(data_sheet[[col_name]])) | |
for (entry in correos_raw) { | |
correos_found <- str_extract_all(entry, email_pattern)[[1]] | |
correos <- unique(c(correos, correos_found)) | |
} | |
} | |
originalFileContent(correos) | |
output$contents <- renderTable({ | |
data.frame(Content = originalFileContent()) | |
}) | |
}) | |
}, | |
"txt" = { | |
data_sheet <- readLines(input$file$datapath) | |
emails <- unlist(regmatches(data_sheet, gregexpr(email_pattern, data_sheet))) | |
originalFileContent(unique(emails)) | |
output$contents <- renderTable({ | |
data.frame(Content = originalFileContent()) | |
}) | |
} | |
) | |
save_file <- function() { | |
file.copy(input$file$datapath, "/home/juan/Desktop/shiny_email") | |
} | |
output$Download <- downloadHandler( | |
filename = function() { | |
paste(tools::file_path_sans_ext(input$file$name), "_emails", ".xlsx", sep = "") | |
}, | |
content = function(file) { | |
emails_df <- data.frame(Emails = as.character(originalFileContent())) | |
write.xlsx(emails_df, file) | |
} | |
) | |
output$Download2 <- downloadHandler( | |
filename = function() { | |
paste(tools::file_path_sans_ext(input$file$name), "_emails", ".txt", sep = "") | |
}, | |
content = function(file) { | |
write.table(originalFileContent(), file) | |
} | |
) | |
}) # End of observeEvent of file upload | |
} # End of server function |