Hola,

Por si todavía es de interés la solución basada en una expresión regular:

#------------------------------------
>
> val.str <-  '1,2,"algo;todo"; 3,"cosa"; 4,2,3,7;'
> val.str
[1] "1,2,\"algo;todo\"; 3,\"cosa\"; 4,2,3,7;"
>
> #---- Se sustituye el ";" entre dos letras por un "-"
> val.sub <- gsub("(?<=[a-z-A-Z]);(?=[a-z-A-Z])", "-", val.str, perl=T)
> val.sub
[1] "1,2,\"algo-todo\"; 3,\"cosa\"; 4,2,3,7;"
>
> #---- Se divide la cadena anterior por los ";"
> strsplit(val.sub, ";")
[[1]]
[1] "1,2,\"algo-todo\"" " 3,\"cosa\""       " 4,2,3,7"

#------------------------------------


Saludos,
Carlos Ortega
www.qualityexcellence.es


El 18 de febrero de 2013 17:30, Carlos J. Gil Bellosta <cgb@datanalytics.com
> escribió:

> Hola, ¿qué tal?
>
> Se me ha ocurrido una alternativa:
>
> x <- '1,2,"algo;todo"; 3,"cosa; mala"; 4,2,3,7;'
> t(read.table(textConnection(x), sep = ";"))
>
> Así se aprovecha que read.table sí que es capaz de distinguir los
> separadores entrecomillados de los que no...
>
> Y sí, efectivamente, en Lituania, las descripciones de algunos campos
> de algunos ficheros con formato PC-Axis que quieren leer con pxR
> incluyen puntos y comas...
>
> Un saludo,
>
> Carlos J. Gil Bellosta
> http://www.datanalytics.com
>
>
> El día 18 de febrero de 2013 16:09, Francisco Viciana
> <franciscoj.viciana@juntadeandalucia.es> escribió:
> > Creo que esto Funciona:
> >
> > ## --------------------------------
> > x <- '1,2,"algo;todo"; 3,"cosa; mala"; 4,2,3,7;'
> > m <- gregexpr('"[^"]*"', x)
> > blanks <- function(n) {
> >   vapply(Map(rep.int, rep.int(" ", length(n)), n, USE.NAMES = FALSE),
> >          paste, "", collapse = "")
> > }
> > s <- x
> > regmatches(s, m) <- Map(blanks, lapply(regmatches(s, m), nchar))
> > m <- gregexpr("; *", s)
> > cbind(regmatches(x, m, invert = TRUE)[[1]])
> > ## --------------------------------
> >
> > La idea la he tomado del uno de los ejemplo del help(regmatches), donde
> se
> > explica mejor su funcionamiento. A partir de aquí se podría hacer una
> > función "strsplit.with.deli", que entre otras cosas solucionaría algunos
> de
> > los fallos de importación del paquete "pxR".
> >
> > Fran
> >
> > El 18/02/2013 13:05, Carlos J. Gil Bellosta escribió:
> >>
> >> 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
> >>
> >> _______________________________________________
> >> R-help-es mailing list
> >> R-help-es@r-project.org
> >> https://stat.ethz.ch/mailman/listinfo/r-help-es
> >>
> >
> > --
> > +--------------------------------------------------------------
> > | Francisco J. Viciana Fernández
> > | Coordinador del Registro de Población
> > | Servicio de Estadísticas Demográficas y Sociales
> > | Instituto de Estadística y Cartografía de Andalucía
> > | Leonardo Da Vinci, nº 21. Isla de La Cartuja.
> > | 41071 SEVILLA.
> > | franciscoj.viciana@juntadeandalucia.es
> > +--------------------------------------------------------------
> >
> >
> > _______________________________________________
> > R-help-es mailing list
> > R-help-es@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
>
> _______________________________________________
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>



-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]

