• Publicidad

Dividir línea con campos vacíos

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Dividir línea con campos vacíos

Notapor boligan » 2017-11-15 11:50 @534

Hola.

Bueno, no supe muy bien qué poner de título, así que me disculpan.

El problema que tengo es el siguiente: leo un archivo CSV línea a línea y con split(/\,+/,$archivo lo voy guardando en un arreglo pero sucede que tiene valores que están vacíos, o sea:

78317,1970,01,01,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,,,,,,,,,,,,,,,,,

Esos que están (no están) entre comas, vacíos, necesito guardarlos también y que en el arreglo me los ponga como -no data-, pero la función split() sencillamente pasa de ellos y solo me saca los que tienen algún valor.

¿Cómo puedo hacer lo anterior? Gracias.
boligan
Perlero nuevo
Perlero nuevo
 
Mensajes: 20
Registrado: 2017-06-14 11:28 @519

Publicidad

Re: Dividir línea con campos vacíos

Notapor explorer » 2017-11-15 12:44 @572

Cambia la expresión regular a esta: /[,]/

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ perl -E '$x = "78317,1970,01,01,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,,,,,,,,,,,,,,,,,"; @x = split /[,]/, $x; for (@x) { $_ = "-no data-" if not $_; }  say  @x'
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Dividir línea con campos vacíos

Notapor boligan » 2017-11-15 13:02 @584

Oye, genial. Ahora sí funciona.

Bueno, si puedes me gustaría saber cuál es la diferencia de esos patrones /\,+/ y /[,]/.

Gracias.
boligan
Perlero nuevo
Perlero nuevo
 
Mensajes: 20
Registrado: 2017-06-14 11:28 @519

Re: Dividir línea con campos vacíos

Notapor explorer » 2017-11-15 15:33 @689

Con /\,+/ estás buscando por una o más comas. Cuando la expresión regular ve un conjunto de comas seguidas, las eliminará todas, como si fueran un único delimitador.

En cambio, con /[,]/ estamos buscando por cada coma, así que split() generará un campo por cada coma encontrada.

No afecta que la coma se ponga de una de estas tres maneras:

/[,]/
/\,/
/,/

Elegí [,] porque es muy visual.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 20 invitados