Ниже приведена функция R, которая читает многострочный запрос SQL (из текстового файла) и преобразует его в однострочную строку. Функция удаляет форматирование и комментарии в целых строках.
Чтобы использовать его, запустите код для определения функций, и ваша однострочная строка будет результатом выполнения
ONELINEQ ( "querytextfile.sql", "~ / путь / к / thefile").
Как это работает: встроенные комментарии подробно это; он читает каждую строку запроса и удаляет (заменяет ничто) все, что не нужно для записи однострочной версии запроса (как это было задано в вопросе) Результатом является список строк, некоторые из которых не заполнены и отфильтрованы; последний шаг - вставить этот (не в списке) список вместе и вернуть одну строку.
#
# This set of functions allows us to read in formatted, commented SQL queries
# Comments must be entire-line comments, not on same line as SQL code, and begun with "--"
# The parsing function, to be applied to each line:
LINECLEAN <- function(x) {
x = gsub("\t+", "", x, perl=TRUE); # remove all tabs
x = gsub("^\\s+", "", x, perl=TRUE); # remove leading whitespace
x = gsub("\\s+$", "", x, perl=TRUE); # remove trailing whitespace
x = gsub("[ ]+", " ", x, perl=TRUE); # collapse multiple spaces to a single space
x = gsub("^[--]+.*$", "", x, perl=TRUE); # destroy any comments
return(x)
}
# PRETTYQUERY is the filename of your formatted query in quotes, eg "myquery.sql"
# DIRPATH is the path to that file, eg "~/Documents/queries"
ONELINEQ <- function(PRETTYQUERY,DIRPATH) {
A <- readLines(paste0(DIRPATH,"/",PRETTYQUERY)) # read in the query to a list of lines
B <- lapply(A,LINECLEAN) # process each line
C <- Filter(function(x) x != "",B) # remove blank and/or comment lines
D <- paste(unlist(C),collapse=" ") # paste lines together into one-line string, spaces between.
return(D)
}
# TODO: add eof newline automatically to remove warning
#############################################################################################