[R-es] Cortar una cadena por un caracter solo cuando no forma parte de una subcadena entrecomillada

Carlos J. Gil Bellosta cgb en datanalytics.com
Lun Feb 18 13:05:54 CET 2013


Hola, ¿qué tal?

Tengo el siguiente problema. Me llegan (simplificando) cadenas del tipo

1,2,"algo"; 3,"cosa"; 4,2,3,7;

y tengo que partirlas por el caracter ";" para meterlas en una lista.
Lo hago con strsplit y no tengo problemas...

... hasta que recibo cadenas como

1,2,"algo;todo"; 3,"cosa"; 4,2,3,7;

en las que existen puntos y coma "entrecomillados". En tales casos, la
función strsplit detecta 4 cadenas,

1,2,"algo          todo"          3,"cosa"         4,2,3,7

en lugar de las tres que quiero, es decir,

1,2,"algo;todo"        3,"cosa"         4,2,3,7

¿Alguien conoce alguna manera simple para que strsplit (u otras
funciones similares) partan la cadena por los ";" que no formen parte
de cadenas entrecomilladas? ¿Tal vez una expresión regular mágica que
reemplace todos los ";" entrecomillados por otra cosa?

(Sé que puedo leer la cadena caracter a caracter y guardar el estado
(entrecomillado o no) para distinguir los ";" que forman parte de las
cadenas de los que son propiamente separadores, pero es algo que me
gustaría poder evitar).

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com



Más información sobre la lista de distribución R-help-es