elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Tomar variables desde txt usando grupos de palabras
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tomar variables desde txt usando grupos de palabras  (Leído 2,291 veces)
AlonsoBytes

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Tomar variables desde txt usando grupos de palabras
« en: 17 Noviembre 2014, 08:13 am »

Amigos, tengo un txt que contiene un texto de este tipo:

Código:
09B321       Alberti Ramirez, Juan    1988    CASADO  

Lo que quiero hacer es mediante un Batch hacer que cada grupo tome una variable. Es decir que la primera variable tenga como valor "09B321", la segunda (aqui viene el problema) el nombre completo "Alberti Ramirez, Juan" y asi.

Cada txt tiene una sola linea, asi que solo se leeria tal cual esta en el ejemplo, pero se me presenta el inconveniente de como hago para que el batch identifique los espacios largos y los use para tomar los datos solicitados.

*Nota: los datos varían en longitud, porque se me ocurrio usar caracteres por numeros pero no puedo porque los nombres hacen variar la longitud.

Espero haberme explicado bien. Agradezco su apoyo!!


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.874



Ver Perfil
Re: Tomar variables desde txt usando grupos de palabras
« Respuesta #1 en: 17 Noviembre 2014, 17:43 pm »

Batch es una herramienta simple, no es un lenguaje capacitado para procesar un String con las condiciones que precisas, se podría hacer, pero habría que invertir bastante tiempo en el desarrollo y elaboración del algoritmo para finálmente obtener un código muy engorroso e ineficiente a diferencia de cómo se podría llevar a cabo en un lenguaje de verdad.

Podrías partir la cadena según la cantidad de espacios entre palabra y palabra, pero dijiste algo de la longitud y no se si será respecto a los espacios, así que de todas formas te sugiero una solución más global, utilizar expresiones regulares (RegEx) ya que supongo que la fecha siempre tendrá el mismo formato: 19xx o 20xx y te puedes servir en eso, aunque para esto debes recurrir a cualquier otro lenguaje que soporte RegEx (VisualBasicScripting, por ejemplo, que está integrado en cualquier Windows, aunque es otro lenguaje simple e igual de inproductivo que Batch).

Esta podría ser una expresión regular que cumpliese con tus espectativas:
Código:
(^\w+)\s+([\w\.\,\;\-\s+]+?)\s+(\d{4})\s+(\w+$)

El interior de cada paréntesis representa un grupo, cada grupo captura una palabra/token de la frase, y hay 4 grupos (4 pares de paréntesis) ya que necesitas capturar 4 tokens.


Regular expression - Wikipedia, the free encyclopedia



Te muestro un ejemplo de utilización de esa expresión regular en VisualBasic.Net, tomatelo como un pseudo-code para implementarlo en el lenguaje que prefieras, ya que la mecánica de RegEx es casi idéntica en el resto de lenguajes (no su utilización, pero si el tema de la sintaxis y los grupos):

Código
  1. Imports System.Text
  2.  
  3. Public Class Form1
  4.  
  5. #Region " Regular expression "
  6.  
  7.    ' La cadena de referencia.
  8.    ReadOnly str As String = "09B321       Alberti Ramirez, Juan    1988    CASADO"
  9.  
  10.    ' Las partes de la expresion regular.
  11.    ReadOnly regExToken1 As String = "^\w+" ' "09B321"
  12.    ReadOnly regExToken2 As String = "[\w\.\,\;\-\s+]+?" ' "Alberti Ramirez, Juan"
  13.    ReadOnly regExToken3 As String = "\d{4}" ' "1988"
  14.    ReadOnly regExToken4 As String = "\w+$" ' "CASADO"
  15.  
  16.    ' La expresión regular completa.
  17.    ' (^\w+)\s+([\w\.\,\;\-\s+]+?)\s+(\d{4})\s+(\w+$)
  18.    ReadOnly fullEx = String.Format("({0})\s+({1})\s+({2})\s+({3})",
  19.                                    regExToken1, regExToken2, regExToken3, regExToken4)
  20.  
  21.    ' La instancia del motor RegEx.
  22.    ReadOnly regEx As New RegularExpressions.Regex(fullEx, RegularExpressions.RegexOptions.Singleline)
  23.  
  24.    ' Las capturas de cada token/grupo de la expresión regular.
  25.    ReadOnly regExGroup1 As RegularExpressions.Group = regEx.Match(str).Groups(1)
  26.    ReadOnly regExGroup2 As RegularExpressions.Group = regEx.Match(str).Groups(2)
  27.    ReadOnly regExGroup3 As RegularExpressions.Group = regEx.Match(str).Groups(3)
  28.    ReadOnly regExGroup4 As RegularExpressions.Group = regEx.Match(str).Groups(4)
  29.  
  30. #End Region
  31.  
  32.    Private Shadows Sub Load() Handles MyBase.Load
  33.  
  34.        Dim sb As New StringBuilder
  35.        With sb
  36.            .AppendLine(String.Format("Token 1: '{0}'", regExGroup1.Value))
  37.            .AppendLine(String.Format("Token 2: '{0}'", regExGroup2.Value))
  38.            .AppendLine(String.Format("Token 3: '{0}'", regExGroup3.Value))
  39.            .AppendLine(String.Format("Token 4: '{0}'", regExGroup4.Value))
  40.        End With
  41.  
  42.        MessageBox.Show(sb.ToString, "Capturas RegEx", MessageBoxButtons.OK, MessageBoxIcon.Information)
  43.  
  44.    End Sub
  45.  
  46. End Class




Saludos.


« Última modificación: 17 Noviembre 2014, 17:51 pm por Eleкtro » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines