2015-01-28 2 views
3

텍스트를 txt 파일에서 읽고 SQL에 내용을 전달하고 있습니다. SQL 텍스트에 큰 따옴표가 들어있어 문제가 발생합니다. 그래서 SQL로 보낼 수 아래 내가 문자열에서 "\"를 제거하려는문자열에서 백 슬래시를 제거하십시오.

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

내가 인용되지 않은 문자열을 전달 할 때 나는이 얻을 SQL로 인용되지 않은 널 객체

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

을 반환 오류 :

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

@ 리차드 - 이중 따옴표로 바꿀 수는 없습니다. 어떤 생각을 "\"제거하는 방법 – user3022875

+0

'cat'은 부작용 만 제공하고 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"