从字符串中删除反斜杠
Remove backslashes from character string
我正在从 txt 文件中读取文本并将内容传递给 SQL。 SQL 文本包含双引号并导致问题。我想删除下面字符串中的“\”,这样我就可以将它发送到 SQL
test<- "select case when \"est\" dsaf"
test<- cat(test, sep="")
class(test)
returns 一个未引用的空对象
> 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
我希望它在 return 中包含前引号和尾随引号,然后我可以将它发送到 SQl 并且它会起作用。
[1] "select case when "est" dsaf"
也许您希望看到同一字符串的不同表示形式:
test2 <- 'select case when "est" dsaf'
test<- "select case when \"est\" dsaf"
identical(test, test2)
#[1] TRUE
当使用双引号构建字符值时,\"
的任何内部实例都将变为双引号。它们将通过 print
(以及您在交互式会话中看到的 REPL)与转义反斜杠一起显示,但使用 cat
您无法确定它们实际上不是反斜杠。
进一步证明:
> nchar("\"")
[1] 1
您可以使用 cat
或使用 quote=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
所以这是第一个问题。第二个问题是尝试分配 cat
调用的值。 cat
函数在将其值发送到目的地(可能是控制台输出)后总是 returns NULL。您不能将生成的字符值保存为 R 名称。你总是得到 NULL。请参阅 ?cat
帮助页面。
R - gsub replacing backslashes 中的解决方案对我有用。
示例:
library(stringr)
df$variable <- str_replace(df$variable,"\\","")
df$variable before: "xyz\"
df$variable after:"xyz"
我正在从 txt 文件中读取文本并将内容传递给 SQL。 SQL 文本包含双引号并导致问题。我想删除下面字符串中的“\”,这样我就可以将它发送到 SQL
test<- "select case when \"est\" dsaf"
test<- cat(test, sep="")
class(test)
returns 一个未引用的空对象
> 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
我希望它在 return 中包含前引号和尾随引号,然后我可以将它发送到 SQl 并且它会起作用。
[1] "select case when "est" dsaf"
也许您希望看到同一字符串的不同表示形式:
test2 <- 'select case when "est" dsaf'
test<- "select case when \"est\" dsaf"
identical(test, test2)
#[1] TRUE
当使用双引号构建字符值时,\"
的任何内部实例都将变为双引号。它们将通过 print
(以及您在交互式会话中看到的 REPL)与转义反斜杠一起显示,但使用 cat
您无法确定它们实际上不是反斜杠。
进一步证明:
> nchar("\"")
[1] 1
您可以使用 cat
或使用 quote=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
所以这是第一个问题。第二个问题是尝试分配 cat
调用的值。 cat
函数在将其值发送到目的地(可能是控制台输出)后总是 returns NULL。您不能将生成的字符值保存为 R 名称。你总是得到 NULL。请参阅 ?cat
帮助页面。
R - gsub replacing backslashes 中的解决方案对我有用。
示例:
library(stringr)
df$variable <- str_replace(df$variable,"\\","")
df$variable before: "xyz\"
df$variable after:"xyz"