R/write_project_csv.R

Defines functions write_project_csv

Documented in write_project_csv

#' Writes csv with overwrite/append options if file exists
#' @param csv_basename basename without file extension of the output file
#' @param timestamp    TRUE if a "_YYYY-MM-DD HH:MM:SS" timestamp is desired in the output filename
#' @param path_folder  destination folder name. If this folder does not exist, it will be created.
#' @importFrom readr write_csv
#' @export
#'
write_project_csv <-
        function(dataframe, csv_basename, timestamp = TRUE, path_folder = "OUTPUT") {

                ##Getting essential data
                dataframe_name <- deparse(substitute(dataframe))
                mirroR::dir_create_if_not_exist(path_folder) ##Creating directory if doesn't exist

                ##Getting log csv full fn
                dir_name <- dirname(path_folder) ##Log csv always in topmost directory
                log_csv_full_fn <- paste0("./", dir_name, "/", tolower(dir_name), "_log.csv")

                projectloggeR::write_log_csv(dir_name)
                stopifnot(file.exists(log_csv_full_fn))

                if (timestamp == FALSE) {
                        fn <- mirroR::create_path_to_file(path_folder = path_folder,
                                            basename = csv_basename,
                                            file_extension = "csv")
                } else {
                        fn <- mirroR::create_path_to_file(path_folder = path_folder,
                                                  basename = paste0(csv_basename, "_", mirroR::get_timestamp()),
                                                  file_extension = "csv")
                }

                if (!(file.exists(fn))) {
                                readr::write_csv(dataframe, fn)

                                typewriteR::tell_me("Finished writing ", fn, ".")

                                append_csv(log_csv_full_fn,
                                                data.frame(LOAD_TIMESTAMP = "",
                                                           LOAD_COMMENT = "",
                                                           PARENT_FN = "",
                                                           SOURCE_COMMENT = "",
                                                           FN = "",
                                                           FN_MD5SUM = "",
                                                           LOG_ID = "",
                                                           ROBJ_NAME = dataframe_name,
                                                           RDATA_FN = "",
                                                           RDATA_FN_MD5SUM = "",
                                                           LOG_TIMESTAMP = "",
                                                           LOG_COMMENT = "",
                                                           WRITE_TIMESTAMP = mirroR::get_timestamp(),
                                                           WRITE_COMMENT = "",
                                                           WRITE_FULL_FN = fn,
                                                           WRITE_FULL_FN_MD5SUM = tools::md5sum(fn),
                                                           TO_DB_TIMESTAMP = "",
                                                           TO_DB_COMMENT = "",
                                                           TO_DB_NAME = "",
                                                           TO_DB_SCHEMA = "",
                                                           TO_DB_TABLE = "",
                                                           FROM_DB_TIMESTAMP = "",
                                                           FROM_DB_COMMENT = "",
                                                           FROM_DB_NAME = "",
                                                           FROM_DB_SCHEMA = "",
                                                           FROM_DB_TABLE = "")
                                           )
                } else {
                        typewriteR::tell_me(fn, " already exists!")

                        df <- typewriteR::create_menu(data.frame(SELECT = c("overwrite", "append", "rename this file")))

                        ans <- typewriteR::pick_menu_item(df)
                        ans <- ans$SELECT[1]

                        if (ans == "overwrite") {
                                typewriteR::tell_me("WARNING:", fn, "will now be overwritten!")
                                typewriteR::stop_and_enter()
                                readr::write_csv(dataframe, fn)

                                append_csv(log_csv_full_fn,
                                           data.frame(LOAD_TIMESTAMP = "",
                                                      LOAD_COMMENT = "",
                                                      PARENT_FN = "",
                                                      SOURCE_COMMENT = "",
                                                      FN = "",
                                                      FN_MD5SUM = "",
                                                      LOG_ID = "",
                                                      ROBJ_NAME = dataframe_name,
                                                      RDATA_FN = "",
                                                      RDATA_FN_MD5SUM = "",
                                                      LOG_TIMESTAMP = "",
                                                      LOG_COMMENT = "",
                                                      WRITE_TIMESTAMP = mirroR::get_timestamp(),
                                                      WRITE_COMMENT = "",
                                                      WRITE_FULL_FN = fn,
                                                      WRITE_FULL_FN_MD5SUM = tools::md5sum(fn),
                                                      TO_DB_TIMESTAMP = "",
                                                      TO_DB_COMMENT = "",
                                                      TO_DB_NAME = "",
                                                      TO_DB_SCHEMA = "",
                                                      TO_DB_TABLE = "",
                                                      FROM_DB_TIMESTAMP = "",
                                                      FROM_DB_COMMENT = "",
                                                      FROM_DB_NAME = "",
                                                      FROM_DB_SCHEMA = "",
                                                      FROM_DB_TABLE = "") %>%
                                                   dplyr::mutate_all(as.character) %>%
                                                   dplyr::mutate_all(trimws, "both"))
             } else if (ans == "append") {
                                typewriteR::tell_me("WARNING:", fn, "will now be appended!")
                                typewriteR::stop_and_enter()
                                projektoR::append_csv(csv_fn = fn, dataframe = dataframe)

                                append_csv(log_csv_full_fn,
                                           data.frame(LOAD_TIMESTAMP = "",
                                                      LOAD_COMMENT = "",
                                                      PARENT_FN = "",
                                                      SOURCE_COMMENT = "",
                                                      FN = "",
                                                      FN_MD5SUM = "",
                                                      LOG_ID = "",
                                                      ROBJ_NAME = dataframe_name,
                                                      RDATA_FN = "",
                                                      RDATA_FN_MD5SUM = "",
                                                      LOG_TIMESTAMP = "",
                                                      LOG_COMMENT = "",
                                                      WRITE_TIMESTAMP = mirroR::get_timestamp(),
                                                      WRITE_COMMENT = "",
                                                      WRITE_FULL_FN = fn,
                                                      WRITE_FULL_FN_MD5SUM = tools::md5sum(fn),
                                                      TO_DB_TIMESTAMP = "",
                                                      TO_DB_COMMENT = "",
                                                      TO_DB_NAME = "",
                                                      TO_DB_SCHEMA = "",
                                                      TO_DB_TABLE = "",
                                                      FROM_DB_TIMESTAMP = "",
                                                      FROM_DB_COMMENT = "",
                                                      FROM_DB_NAME = "",
                                                      FROM_DB_SCHEMA = "",
                                                      FROM_DB_TABLE = "") %>%
                                                   dplyr::mutate_all(as.character) %>%
                                                   dplyr::mutate_all(trimws, "both")
                                           )
           } else {
                                typewriteR::tell_me("Please enter another filename other than", fn, ".")
                                fn <- readline("New full_file_path: ")

                                if (!(file.exists(fn))) {
                                        readr::write_csv(dataframe, fn)
                                        append_csv(log_csv_full_fn,
                                                   data.frame(LOAD_TIMESTAMP = "",
                                                              LOAD_COMMENT = "",
                                                              PARENT_FN = "",
                                                              SOURCE_COMMENT = "",
                                                              FN = "",
                                                              FN_MD5SUM = "",
                                                              LOG_ID = "",
                                                              ROBJ_NAME = dataframe_name,
                                                              RDATA_FN = "",
                                                              RDATA_FN_MD5SUM = "",
                                                              LOG_TIMESTAMP = "",
                                                              LOG_COMMENT = "",
                                                              WRITE_TIMESTAMP = mirroR::get_timestamp(),
                                                              WRITE_COMMENT = "",
                                                              WRITE_FULL_FN = fn,
                                                              WRITE_FULL_FN_MD5SUM = tools::md5sum(fn),
                                                              TO_DB_TIMESTAMP = "",
                                                              TO_DB_COMMENT = "",
                                                              TO_DB_NAME = "",
                                                              TO_DB_SCHEMA = "",
                                                              TO_DB_TABLE = "",
                                                              FROM_DB_TIMESTAMP = "",
                                                              FROM_DB_COMMENT = "",
                                                              FROM_DB_NAME = "",
                                                              FROM_DB_SCHEMA = "",
                                                              FROM_DB_TABLE = "") %>%
                                                           dplyr::mutate_all(as.character) %>%
                                                           dplyr::mutate_all(trimws, "both")
                                                   )
                                }
           }
                }}
patelm9/projektoR documentation built on Dec. 18, 2019, 5:55 a.m.