Como ler texto citado contendo citações de escape

9

Considere o seguinte arquivo separado por vírgula. Para simplificar, deixe uma linha:

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

Se você tentar lê-lo com o comando

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

a linha será separada para 4 partes, porque a linha contém 3 vírgulas. Na verdade eu quero ler apenas 3 partes, uma das quais contém vírgula. A bandeira das citações vem para ajudar. Eu tentei:

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

mas isso cai com o erro "incomplete final line found by readTableHeader on table" . Isso acontece por causa do número ímpar (sete) de citações.

read.table() bem como scan() têm o parâmetro allowEscapes , mas defini-lo como TRUE não ajuda. Está tudo bem, porque de help(scan) você pode ler:

  

As fugas que são interpretadas são os caracteres de controle             "\ A, \ b, \ f, \ n, \ r, \ t, \ v ', ...     ... qualquer outro escapou             caractere é tratado como ele mesmo, incluindo barra invertida

Por favor, sugira como você leria tais arquivos csv citados, contendo escape \' quotes.

    
por Max 17.05.2011 в 16:24
fonte

1 resposta

5

Uma possibilidade é usar readLines() para obter tudo como lida, e então continuar substituindo o caractere de aspas por alguma outra coisa, por exemplo:

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

Isso permite que você leia o vetor tt usando textConnection

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

Não é a solução mais bonita, mas funciona (desde que você não tenha um "caractere em algum lugar do arquivo fora do curso ...)

    
por Joris Meys 17.05.2011 / 16:57
fonte