2011-05-17 14 views
9

Considere el siguiente archivo separado por comas. Por simplicidad dejar que contiene una línea:Cómo leer el texto entre comillas que contiene citas escapadas


'I am quoted','so, can use comma inside - it is not separator here','but can\'t use escaped quote :=(' 

Si intenta leer con el comando

table <- read.csv(filename, header=FALSE) 

la línea se separa a 4 partes, porque la línea contiene 3 comas De hecho, quiero leer solo 3 partes, una de las cuales contiene una coma. Hay una bandera de cotización para pedir ayuda. Probé:

table <- read.csv(filename, header=FALSE, quote="'") 

pero que cae con el error "incomplete final line found by readTableHeader on table". Eso sucede debido a una cantidad impar de (siete) citas.

read.table(), así como scan() tienen parámetros allowEscapes, pero poniéndolo a TRUE no ayuda. Está bien, la causa de help(scan) se puede leer:

Los escapes que se interpretan son los caracteres de control '\ a, \ b, \ f, \ n \ r, \ t, \ v', ... ... Cualquier otra escaparon carácter se trata como sí mismo, incluyendo barra invertida

sugerir por favor ¿cómo leer estos archivos CSV citados, que contienen escaparon \' comillas.

+0

Entiendo lo que estás tratando de hacer, pero estoy confundido sobre por qué usarías 'read.csv()': no es un archivo CSV, no hay varias columnas, todo es solo un bloque de texto, aunque con citas. ¿Estás diciendo que las filas están separadas o no, por qué no usar 'readLines (..., n = 1)'? Debe decir que es texto de líneas múltiples que contiene citas escapadas. – smci

Respuesta

5

Una posibilidad es utilizar readLines() para conseguir todo lo leído en tal cual, y luego proceder al reemplazar el carácter de comillas por otra cosa, por ejemplo:

tt <- readLines("F:/temp/test.txt") 
tt <- gsub("([^\\]|^)'","\\1\"",tt) # replace ' by " 
tt <- gsub("\\\\","\\",tt) # get rid of the double escape due to readLines 

Esto le permite leer la tt vector en el uso de una textConnection

zz <- textConnection(tt) 
read.csv(zz,header=F,quote="\"") # give text input 
close(zz) 
no

la solución más bonito, pero funciona (siempre y cuando no tenga un "carácter en algún lugar en el archivo de su curso ...)

+2

Si reemplaza '\ '' por '' '', 'read.csv' lo manejará. – Marek

+0

@Marek: no lo estoy siguiendo completamente. ¿Dónde exactamente debería reemplazar eso para obtener la salida correcta? –

+3

Me refiero a 'tt <- readLines (archivo); tt <- gsub ("\\\\ '", "' '", tt); read.csv (textConnection (tt), header = FALSE, quote = "'") 'causa que las comillas dobles se leen correctamente (vea'? Scan' -> Details -> quotes). – Marek

Cuestiones relacionadas