Question

Considérez le fichier suivant séparé par des virgules.Pour plus de simplicité, laissez-le contenir une seule ligne :


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

Si vous essayez de le lire avec la commande

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

la ligne sera séparée en 4 parties, car la ligne contient 3 virgules.En fait, je souhaite lire seulement 3 parties, dont une contient elle-même une virgule.Le drapeau de citation vient chercher de l'aide.J'ai essayé:

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

mais cela tombe avec une erreur "incomplete final line found by readTableHeader on table".Cela se produit en raison d'un nombre impair (sept) de citations.

read.table() ainsi que scan() avoir un paramètre allowEscapes, mais en le réglant sur TRUE n'aide pas.C'est bon, parce que de help(scan) tu peux lire:

Les évasions qui sont interprétées sont les caractères de contrôle ' a, b, f, n, r, t, v', ......Tout autre caractère échappé est traité comme lui-même, y compris la barre arrière

Veuillez suggérer comment liriez-vous ces fichiers csv cités, contenant des codes d'échappement \' citations.

Était-ce utile?

La solution

Une possibilité consiste à utiliser readLines() pour que tout soit lu tel quel, puis procédez en remplaçant le caractère guillemet par autre chose, par exemple :

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

Cela vous permet de lire le vecteur tt en utilisant un textConnection

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

Ce n'est pas la plus belle solution, mais ça marche (à condition de ne pas avoir de caractère " quelque part dans le fichier bien sûr...)

Autres conseils

read_delim Depuis le paquet lecteur peut gérer les guillemets échappés, en utilisant les arguments escape_double et escape_backslash.

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

(Notez que les anciennes versions de readr ne prennent pas correctement en charge les nouvelles lignes entre guillemets dans les en-têtes CSV : https://github.com/tidyverse/readr/issues/784)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top