从字符串中删除反斜杠

use*_*875 3 r r-faq

我正在从txt文件中读取文本并将内容传递给SQL.SQL文本包含双引号并导致问题.我想删除下面字符串中的"\",以便将其发送到SQL

  test<- "select case when \"est\"  dsaf"
  test<-  cat(test, sep="")
  class(test)
Run Code Online (Sandbox Code Playgroud)

返回一个UNQUOTED null对象

> test<- "select case when \"est\"  dsaf"
>   test<-  cat(test, sep="")
select case when "est"  dsaf
>   class(test)
[1] "NULL"
Run Code Online (Sandbox Code Playgroud)

当我将未加引号的字符串传递给SQL时,我收到此错误:

Error in odbcQuery(channel, query, rows_at_time) : 
  'getCharCE' must be called on a CHARSXP
Run Code Online (Sandbox Code Playgroud)

我希望它返回引导和尾随引号,然后我可以将它发送到SQl,它将工作.

[1] "select case when "est"  dsaf"
Run Code Online (Sandbox Code Playgroud)

42-*_*42- 10

也许您希望看到相同字符串的不同表示形式:

test2 <- 'select case when "est"  dsaf'
test<- "select case when \"est\"  dsaf"
identical(test, test2)
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)

当使用双引号构建字符值时,任何内部实例都将\"变为双引号.它们将通过print(和您在交互式会话中看到的REPL)使用escape-backslash显示,但是使用cat您无法确定它们实际上并不是作为反斜杠存在.

进一步证明:

>  nchar("\"")
[1] 1
Run Code Online (Sandbox Code Playgroud)

你可以使用cat或打印,quote=FALSE你想要显示内部真正存在的值:

> print(test, quote=FALSE)
[1] select case when "est"  dsaf
Run Code Online (Sandbox Code Playgroud)

这证明至少有一个版本的"SQL"同意(或"接受")当\"字符串内部出现时没有反斜杠:

> require(sqldf)
Loading required package: sqldf
Loading required package: gsubfn
Loading required package: proto
Loading required package: RSQLite
Loading required package: DBI
> ?sqldf
> a1r <- head(warpbreaks)
> a1s <- sqldf("select * from warpbreaks limit 6")
Loading required package: tcltk
> a2s <- sqldf("select * from CO2 where Plant like 'Qn%'")
> 
> a2sdq <- sqldf("select * from CO2 where Plant like \"Qn%\"")
> identical(a2s,a2sdq)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

  • 我给了你一个答案.没有反斜杠要删除. (3认同)
  • 你有答案吗? (2认同)
  • 您正在重复编程行为的拟人化特征。请提供请求的代码和错误消息。 (2认同)