2015-01-28 19 views
3

Я читаю текст из txt-файла и передаю содержимое в SQL. Текст SQL содержит двойные кавычки и вызывает проблемы. Я хотел бы, чтобы удалить «\» в строке ниже, так что я могу отправить его в SQLУдалить обратную косую черту с символьной строки

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

возвращает некотируемый объект нулевого

> 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" 
+2

Верьте или нет, нет обратных косых черт в ' "выбери случай, когда \" ЭСТ \ "dsaf"'. Пожалуйста, прочитайте '? Quotes' –

+0

@Richard - я не могу изменить их на одинарные кавычки, которые им нужно удвоить. Любая идея, как устранить «\» – user3022875

+0

«Кошка» обеспечивает только побочный эффект и возвращает объект NULL. –

ответ

8

Может быть, вы хотели бы видеть другое представление тех же строки:

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 
+2

У вас есть ответ? – user3022875

+3

Я дал вам ответ. Для удаления нет обратной косой черты. –

+1

Я передаю это в строку в SQL, и он видит «\», поэтому мне нужно его удалить. – user3022875

-1

Решение в R - gsub replacing backslashes работало для меня.

Пример:

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

df$variable before: "xyz\" 
df$variable after:"xyz" 
Смежные вопросы