Pergunta

Considere o seguinte arquivo separado por vírgula.Para simplificar, deixe-o conter 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 em 4 partes, pois a linha contém 3 vírgulas.Na verdade quero ler apenas 3 partes, uma das quais contém vírgula.O sinalizador de citação vem em busca de ajuda.Tentei:

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

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

read.table() assim como scan() tem parâmetro allowEscapes, mas configurando-o para 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 personagem escapado é tratado como por si só, incluindo barra de barragem

Por favor, sugira como você leria esses arquivos csv citados, contendo escape \' citações.

Foi útil?

Solução

Uma possibilidade é usar readLines() para que tudo seja lido como está e, em seguida, substitua o caractere de aspas por 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 um 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, é claro...)

Outras dicas

read_delim do pacote ler pode lidar com aspas escapadas, usando os argumentos escape_double e escape_backslash.

read_delim(file, delim=',', escape_double=FALSE, escape_backslash=TRUE, quote="'")

(Observe que as versões mais antigas do readr não suportam novas linhas entre aspas nos cabeçalhos CSV corretamente: https://github.com/tidyverse/readr/issues/784)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top