• Publicidad

Función SPLIT en más de 2 millones de datos

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

Re: Función SPLIT en más de 2 millones de datos

Notapor explorer » 2014-06-16 20:02 @876

Bueno... vamos a ver... si el formato es el correcto, podemos dar una expresión regular que sea conforme a él, y de esa manera garantizar que cazará todos los registros (conformes al formato, claro).

Este programa
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. # JF20140617
  3. use v5.14;
  4. use utf8;
  5. use open IO => ':utf8';
  6. use open ':std';
  7.  
  8. ## Leer todo el archivo en una sola línea
  9. my $archivo;
  10. {
  11.     my @archivo = <DATA>;
  12.     chomp @archivo;
  13.     $archivo = join '', @archivo;
  14. }
  15. #say $archivo;
  16. #say '-' x 50;
  17.  
  18. ## Procesar los registros
  19. my $rxString            = qr/.*?/;                                      # Una cadena de texto cualquiera
  20. my $rxID                = qr/\d{10,}/;                                  # Tipo numérico entero, por lo general más grande que 1 000 000 000
  21. my $rxTexto             = qr/$rxString/;                                # tipo cadena de caracteres alfanuméricos
  22. my $rxClasificación    = qr/$rxString/;                                # Cadena de caracteres que identifica el tipo de tweet
  23. my $rxUser              = qr/$rxString/;                                # Cadena de caracteres con el nombre del usuario
  24. my $rxTimeStamp         = qr/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/;      # Fecha y hora de ingreso al sistema del tweet
  25. my $rxURL               = qr/http.+?/;                                  # Dirección donde está alojado el tweet
  26. my $rxNúmero_del_tema  = qr/\d{1,3}/;                                  # Entero no superior a 1000
  27.  
  28. while ($archivo =~ /\((?<ID>$rxID),'(?<Texto>$rxTexto)','$rxClasificación','(?<User>$rxUser)','(?<TimeStamp>$rxTimeStamp)','$rxURL',$rxNúmero_del_tema\)/g) {
  29.     say '-' x 20;
  30.     say "\tID: $+{'ID'}";
  31.     say "\tTexto: [$+{'Texto'}]";
  32.     say "\tUser:  [$+{'User'}]";
  33.     say "\tTimeStamp: $+{'TimeStamp'}";
  34. }
  35.  
  36. ## Ejemplo de archivo de entrada
  37. __DATA__
  38. (1024775407,'No es la apariencia, es la esencia. No es el dinero, es la educación. No es la ropa, es la clase.','Sin cl
  39. asificar','DarihoA','2013-04-05 04:02:43','https://twitter.com/190033321/status/320023668631666688',339),(1024775406,')
  40. RT @allendexxi: Bien la) aprobación de la acusación de (Beyer) pero no olvidamos ((q)) la Concertación también avaló el
  41. lucro en la educación!)','Sin clasificar','Mar_c(i)aVargasS','2013-04-05 04:02:45','https://twitter.com/66868014/status
  42. /320023679369113600',339)
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
genera esta salida:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
--------------------
        ID: 1024775407
        Texto: [No es la apariencia, es la esencia. No es el dinero, es la educación. No es la ropa, es la clase.]
        User:  [DarihoA]
        TimeStamp: 2013-04-05 04:02:43
--------------------
        ID: 1024775406
        Texto: [)RT @allendexxi: Bien la) aprobación de la acusación de (Beyer) pero no olvidamos ((q)) la Concertación también avaló ellucro en la educación!)]
        User:  [Mar_c(i)aVargasS]
        TimeStamp: 2013-04-05 04:02:45
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

La presencia de las comillas y de las comas, ayuda a localizar los campos de los registros. Un split() no sería posible, con este formato, así que hay que usar una expresión regular más compleja.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Función SPLIT en más de 2 millones de datos

Notapor Fernando_Frez_1 » 2014-06-18 12:23 @558

Mil Gracias, aunque no lo comprendo en el 100 % me ha funcionado a la perfección. Estoy estudiándolo y me parece genial. Gracias por la cooperación. De igual forma trataré de cooperar a quién tenga dudas en este foro.


¡Saludos cordiales! :) :D
Fernando_Frez_1
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2014-06-03 16:28 @728

Re: Función SPLIT en más de 2 millones de datos

Notapor explorer » 2014-06-18 17:48 @783

Lo que no entiendas, por favor, pregúntalo aquí.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Anterior

Volver a Básico

¿Quién está conectado?

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