Comment lire une citation du texte contenant échappé citations
Envisager la suite de fichier séparé par des virgules. Pour des raisons de simplicité laisser contenir qu'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 la lire avec la commande
table <- read.csv(filename, header=FALSE)
la ligne va être séparé en 4 parties, parce que la ligne contient 3 virgules. En fait je veux lire seulement 3 parties, dont l'une contient une virgule. Il cite drapeau vient pour les aider. J'ai essayé:
table <- read.csv(filename, header=FALSE, quote="'")
mais qui tombe avec l'erreur "incomplete final line found by readTableHeader on table"
. Qui se produit à cause de l'étrange (sept) nombre de citations.
read.table()
ainsi que scan()
ont paramètre allowEscapes
, mais la mise à TRUE
ne l'aide pas. C'est ok, la cause de l'help(scan)
, vous pouvez lire:
Les fuites qui sont interprétés sont les caractères de contrôle
‘\a, \b, \f, \n, \r, \t, \v’, ...
... Toute autre échappé
caractère est traité comme lui-même, y compris la barre oblique inverse
Veuillez indiquer comment voulez-vous lire ces cités csv fichiers, contenant échappé \'
citations.
read.csv()
: ce n'est pas un fichier CSV, il n'y a pas plusieurs colonnes, c'est tout simplement un bloc de texte, mais avec des guillemets. Vous dites que les lignes sont séparées ou non, pourquoi ne pas simplement utiliser readLines(...,n=1)
? Vous devez vous dire que c'est du texte multiligne contenant échappé citations.OriginalL'auteur Max | 2011-05-17
Vous devez vous connecter pour publier un commentaire.
Une possibilité est d'utiliser
readLines()
pour tout lire dans que est, et ensuite, en remplaçant le caractère de devis par autre chose, par exemple :Cela vous permet de lire le vecteur tt à l'aide d'un
textConnection
Pas la plus belle solution, mais ça marche (à condition que vous n'avez pas un caractère " quelque part dans le fichier off course...)
\'
par''
puisread.csv
va la traiter.Je veux dire
tt <- readLines(file); tt <- gsub("\\\\'","''",tt); read.csv(textConnection(tt),header=FALSE,quote="'")
cause des guillemets doubles sont lus correctement (voir?scan
-> Détails -> citations).Obviosly cela fonctionne pour les fichiers indiqués avec
"
, aussi l'utilisation dett <- gsub("\\\\\"","\"\"",tt);
Bien que cette solution fonctionne pour les petits fichiers, pour les gros fichiers, il devient très lent et utilise beaucoup de mémoire.Une solution de streaming (en possession d'une seule ligne du fichier en mémoire avant qu'il ne passe à la table) serait mieux, mais je n'ai pas (encore) de savoir comment le faire.
Vous pouvez utiliser readLines() pour lire le fichier en morceaux et le processus de ces morceaux, mais toute solution dans R qui implique de gros fichiers ou des jeux de données va devenir lent et va utiliser beaucoup de mémoire. R n'est pas le plus la mémoire d'un langage de conception.
OriginalL'auteur Joris Meys