将多行 SQL 查询导入到单个字符串
在 R 中,如何将多行文本文件(包含 SQL)的内容导入到单个文件中细绳?
sql.txt 文件如下所示:
SELECT TOP 100
setpoint,
tph
FROM rates
我需要将该文本文件导入到 R 字符串中,使其如下所示:
> sqlString
[1] "SELECT TOP 100 setpoint, tph FROM rates"
这样我就可以将其提供给 RODBC,如下所示
> library(RODBC)
> myconn<-odbcConnect("RPM")
> results<-sqlQuery(myconn,sqlString)
我已经尝试了 readLines 命令,如下所示,但它没有给出 RODBC 需要的字符串格式。
> filecon<-file("sql.txt","r")
> sqlString<-readLines(filecon, warn=FALSE)
> sqlString
[1] "SELECT TOP 100 " "\t[Reclaim Setpoint Mean (tph)] as setpoint, "
[3] "\t[Reclaim Rate Mean (tph)] as tphmean " "FROM [Dampier_RC1P].[dbo].[Rates]"
>
In R, how can I import the contents of a multiline text file (containing SQL) to a single string?
The sql.txt file looks like this:
SELECT TOP 100
setpoint,
tph
FROM rates
I need to import that text file into an R string such that it looks like this:
> sqlString
[1] "SELECT TOP 100 setpoint, tph FROM rates"
That's so that I can feed it to the RODBC like this
> library(RODBC)
> myconn<-odbcConnect("RPM")
> results<-sqlQuery(myconn,sqlString)
I've tried the readLines command as follows but it doesn't give the string format that RODBC needs.
> filecon<-file("sql.txt","r")
> sqlString<-readLines(filecon, warn=FALSE)
> sqlString
[1] "SELECT TOP 100 " "\t[Reclaim Setpoint Mean (tph)] as setpoint, "
[3] "\t[Reclaim Rate Mean (tph)] as tphmean " "FROM [Dampier_RC1P].[dbo].[Rates]"
>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
多功能的
paste()
命令可以通过参数collapse=""
来完成此操作:The versatile
paste()
command can do that with argumentcollapse=""
:下面是一个 R 函数,它读取多行 SQL 查询(从文本文件)并将其转换为单行字符串。该函数删除格式和整行注释。
要使用它,请运行代码来定义函数,单行字符串将是运行的结果
ONELINEQ("querytextfile.sql","~/path/to/thefile").
它是如何工作的:内联注释对此进行了详细说明;它读取查询的每一行并删除(替换为任何内容)写出查询的单行版本不需要的任何内容(如问题中所要求的)。结果是一个行列表,其中一些是空白的并被过滤掉;最后一步是将这个(未列出的)列表粘贴在一起并返回单行。
#
Below is an R function that reads in a multiline SQL query (from a text file) and converts it into a single-line string. The function removes formatting and whole-line comments.
To use it, run the code to define the functions, and your single-line string will be the result of running
ONELINEQ("querytextfile.sql","~/path/to/thefile").
How it works: Inline comments detail this; it reads each line of the query and deletes (replaces with nothing) whatever isn't needed to write out a single-line version of the query (as asked for in the question). The result is a list of lines, some of which are blank and get filtered out; the last step is to paste this (unlisted) list together and return the single line.
#
这是我正在使用的最终版本。谢谢德克。
Here's the final version of what I'm using. Thanks Dirk.
这就是我使用的:
This is what I use:
尝试粘贴(sqlString,崩溃=“”)
try
paste(sqlString, collapse=" ")
可以使用
readChar()
代替readLines()
。我一直遇到混合注释(--
或/* */
)的问题,这对我来说一直很有效。It's possible to use
readChar()
instead ofreadLines()
. I had an ongoing issue with mixed commenting (--
or/* */
) and this has always worked well for me.我同时使用
sql <- gsub("\n","",sql)
和sql <- gsub("\t","",sql)
。I use
sql <- gsub("\n","",sql)
andsql <- gsub("\t","",sql)
together.