从字符串中删除反斜杠

Remove backslashes from character string

提问人:user3022875 提问时间:1/29/2015 最后编辑:Gregor Thomasuser3022875 更新时间:10/9/2020 访问量:8279

问:

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

  test<- "select case when \"est\"  dsaf"
  test<-  cat(test, sep="")
  class(test)

返回一个 UNQUOTED null 对象

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

当我将不带引号的字符串传递给 SQL 时,出现以下错误:

Error in odbcQuery(channel, query, rows_at_time) : 
  'getCharCE' must be called on a CHARSXP

我希望它返回前导和尾随引号,然后我可以将其发送到 SQl,它会起作用。

[1] "select case when "est"  dsaf"
R-常见问题

评论

2赞 IRTFM 1/29/2015
信不信由你,中没有反斜杠字符。请阅读"select case when \"est\" dsaf"?Quotes
0赞 user3022875 1/29/2015
@Richard - 我不能将它们更改为单引号,它们必须是双引号。任何知道如何消除“\”的想法
0赞 IRTFM 1/29/2015
only 提供副作用并返回 NULL 对象。cat
0赞 rawr 1/29/2015
在 SQL 中需要做什么,而在 R 中做不到?
0赞 IRTFM 1/29/2015
提供错误之前的完整代码。(如果使用 的结果来自 ,则为 NULL。cattest

答:

12赞 IRTFM 1/29/2015 #1

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

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

当使用双引号生成字符值时,任何内部实例都只能使用双引号。它们将由(以及您在交互式会话中看到的 REPL)显示,带有转义反斜杠,但使用您无法确定它们实际上不是作为反斜杠存在的。\"printcat

进一步证明:

>  nchar("\"")
[1] 1

您可以使用 either 或 print with 您想要显示该值,因为它在内部确实存在:catquote=FALSE

> print(test, quote=FALSE)
[1] select case when "est"  dsaf

这证明至少有一个版本的“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

所以这是第一个问题。第二个问题是尝试分配调用的值。该函数在将其值发送到目标(可能是控制台输出)后始终返回 NULL。不能将生成的字符值保存到 R 名称。你总是得到 NULL。请参阅帮助页面。catcat?cat

评论

2赞 user3022875 1/29/2015
你有答案吗?
3赞 IRTFM 1/29/2015
我给了你一个答案。没有要删除的反斜杠。
1赞 user3022875 1/29/2015
我将其传递给字符串到 SQL,它确实看到了“\”,这就是为什么我需要删除它。
2赞 IRTFM 1/29/2015
您正在重复程序化行为的拟人化特征。请提供所需的代码和错误消息。
1赞 IRTFM 1/29/2015
右。这就是记录在案的返回内容。您仍然没有提供任何证据证明与任何“SQL”实例通信会产生与测试对象中存在反斜杠相关的错误。cat
0赞 Ted 7/17/2017 #2

R - gsub 中的解决方案替换反斜杠对我有用。

例:

library(stringr)
df$variable <- str_replace(df$variable,"\\\\","")

df$variable before: "xyz\"
df$variable after:"xyz"