Cargar parte de texto desde archivo .txt

Colapsar
X
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar todos
nuevos mensajes

  • Cargar parte de texto desde archivo .txt

    Buenas tardes amigos foreros, ultimamente he molestado poco ya que no he tenido mayores problemas, ja ja. Les cuento que he tenido la siguiente dificultad, hoy día en la empresa donde trabajo me envian los recibos digitales mes a mes pero en un archivo de texto .txt donde están los recibos de todos los funcionarios uno detras del otro.

    Hoy día estoy intentando realizar una aplicación para imprimir los recibos de forma individual. Lo poco que he desarrollado en VB 6.0 siempre lo hice con base de datos y nunca maneje .txt por lo cual se me dificulta pensar en extraer datos de un .txt.

    En concreto, necesito extraer unas varias líneas de texto de un .txt luego de encontrar el numero de documento del funcionario, y colocarlo en un Listview luego de elegir el mes correspondiente desde un Listbox mediate una casilla de verificación.

    Ya puedo:
    -Cargar el Listbox con todos los txt
    -Hice la sentencia en el textbox que me verifica el numero de documento del funcionario
    -Logre cargar el Listview con todos los recibos

    Me falta filtrar la carga por numero de documento del funcionario el cual tengo en un textbox
    Dejo un ejemplo de como son los recibos solo dejo 2 respetando los espacios que trae el origial, son más de 500, y la sentencia que uso para cargarlo. ESPERO ALGUIEN PUEDA AYUDARME.-

    -----------------------------------------------------------------
    Código HTML:
    Private Sub Cargartxt()
    Me.List1.Clear
    Dim i As Integer
    Dim StrMesDeRecibo As String
    Dim variable As String
    
    StrMesDeRecibo = FormLeerRecibos.ListMeses.Text
    Dim strRuta As String 'aqui declaro una variable en donde pones la ruta del archivo
    
    
    strRuta = "C:\Pryecto recibo\Recibos" & StrMesDeRecibo & ""
    Dim strLinea As String 'aqui declaro otra variable en donde ponego la linea que estoy leyendo
    
    Open strRuta For Input As #1 'Con esto abro el archivo
    
    While Not EOF(1)
    Line Input #1, strLinea 'y con esto leo linea por linea
    List1.AddItem strLinea
    Wend
    
    Close #1 'con esto cierro el archivo
    
    End Sub
    -----------------------------------------------------------------


    ADMINISTRACION DE LOS SERVICIOS DE SALUD DEL ESTADO - L.A. de Herrera 3326
    RUT: 214935520018 - NRO AFIL. BPS: 5049692 - GRUPO/SUBGRUPO: Sector Publico

    DICIEMBRE/2013 Liq:M 1 U.Ej:21 Prog: 7 Grupo:10 Correlativo: 123 Nro.Func: 909275 Nro. Recibo: 1794

    FUNCIONARIO 1 1234567-8 Fecha Ingreso: 01/07/79 TECNICO


    11311.0 SDO.BASICO PR. 2.779,33
    11414.0 ARTICULO 26 PR. 757,15
    11414.9 DIF. ART26 1.054,14
    48017.0 AUMENTO MAYO/2003 P 231,92
    48018.0 COMPLEMENTO ARTICUL 174,98
    48021.0 ADICIONAL DECRETO 2 476,18
    48023.0 INC. REC. SALARIAL 155,61
    48025.1 RECUP. SALARIAL MSP 6.370,35
    48026.0 INC. SAL. 200701 164,80
    48070.0 ALTA DEDICACION 120.199,15
    61318.0 NIV. PORC. MANDOS M 1.15 2.938,48
    62318.0 PRIMA ANTIGUEDAD PR 33 1.714,68
    64413.0 COMP. MENSUAL M.S.P 538,81
    66317.0 INC.PRODUC.MEDICA P 1.100,34
    66417.0 PRODUCTIVIDAD 865,74
    67313.0 COMPENSACION 6.95 296,66
    67314.0 COMPENSACION DE TAB 849,09
    69313.4 AUMENTO OCTUBRE/200 3.230,71
    83315.0 AUMENTO ESPECIAL 202,31












    ADMINISTRACION DE LOS SERVICIOS DE SALUD DEL ESTADO - L.A. de Herrera 3326
    RUT: 214935520018 - NRO AFIL. BPS: 5049692 - GRUPO/SUBGRUPO: Sector Publico

    DICIEMBRE/2013 Liq:M 1 U.Ej:21 Prog: 7 Grupo:10 Correlativo: 123 Nro.Func: 909275 Nro. Recibo: 1794

    FUNCIONARIO 1 1234567-8 Fecha Ingreso: 01/07/79 TECNICO


    83318.0 AUMENTO ENERO'94 215,23
    83319.0 AUMENTO DIFERENCIAL 20,45
    88312.0 AUMENTO ADICIONAL 106,02
    40.0 IRPF 17.179,28
    9064.0 FONASA EMPLEADO 3% 4.333,26
    9070.0 FONASA ADICIONAL 1. 2.166,63
    86010.0 MONTEPIO 21.666,32
    83012.0 BROU UNIDADES INDEX 6.171,00
    83267.0 CO.SS.AC. 778,00
    84140.0 BCO. SEGUROS AGRUP. 727,57














    144.442,13 53.022,06 91.420,07





    ADMINISTRACION DE LOS SERVICIOS DE SALUD DEL ESTADO - L.A. de Herrera 3326
    RUT: 214935520018 - NRO AFIL. BPS: 5049692 - GRUPO/SUBGRUPO: Sector Publico

    DICIEMBRE/2013 Liq:M 1 U.Ej:21 Prog: 7 Grupo:10 Correlativo: 555 Nro.Func: 909299 Nro. Recibo: 1795

    FUNCIONARIO 2 2345678-9 Fecha Ingreso: 07/07/87 TECNICO


    11311.0 SDO.BASICO PR. 2.779,33
    11414.0 ARTICULO 26 PR. 757,15
    11414.9 DIF. ART26 1.054,14
    48017.0 AUMENTO MAYO/2003 P 231,92
    48018.0 COMPLEMENTO ARTICUL 274,62
    48018.3 COMPLEMENTO AUMENTO 73,32
    48019.0 COMPLEMENTO AUMENTO 65,37
    48021.0 ADICIONAL DECRETO 2 476,18
    48023.0 INC. REC. SALARIAL 155,61
    48025.1 RECUP. SALARIAL MSP 5.983,06
    48026.0 INC. SAL. 200701 164,80
    48029.0 CONVENIO MEDICO TIT 100.811,24
    48080.0 COMPL. 10% NEFRÓLOG 1.958,98
    62318.0 PRIMA ANTIGUEDAD PR 25 1.299,00
    64413.0 COMP. MENSUAL M.S.P 538,81
    66317.0 INC.PRODUC.MEDICA P 1.100,34
    66417.0 PRODUCTIVIDAD 865,74
    67313.0 COMPENSACION 6.95 296,66
    67314.0 COMPENSACION DE TAB 849,09












    ADMINISTRACION DE LOS SERVICIOS DE SALUD DEL ESTADO - L.A. de Herrera 3326
    RUT: 214935520018 - NRO AFIL. BPS: 5049692 - GRUPO/SUBGRUPO: Sector Publico

    DICIEMBRE/2013 Liq:M 1 U.Ej:21 Prog: 7 Grupo:10 Correlativo: 555 Nro.Func: 909299 Nro. Recibo: 1795

    FUNCIONARIO 2 2345678-9 Fecha Ingreso: 07/07/87 TECNICO


    69313.0 COMP. POR REFORMA D 165,58
    69313.4 AUMENTO OCTUBRE/200 3.230,71
    83315.0 AUMENTO ESPECIAL 202,31
    83318.0 AUMENTO ENERO'94 215,23
    83319.0 AUMENTO DIFERENCIAL 3,84
    88312.0 AUMENTO ADICIONAL 106,02
    752000.0 HOGAR CONSTITUIDO 623,52
    40.0 IRPF 23.160,78
    9064.0 FONASA EMPLEADO 3% 3.709,77
    9071.0 FONASA ADICIONAL 3% 3.709,77
    86010.0 MONTEPIO 14.228,10
    415.0 F.F.S.P. 2.225,86
    418.0 CONVENIOS F.F.S.P. 281,00
    7,00








    124.282,57 47.322,28 76.960,29
    Última edición por jose356; 17-12-2016, 02:07 AM.

  • #2
    Lo que yo haría sería lo siguiente:
    1. Leer línea por línea el archivo txt y comprobar si la línea comienza por la palabra FUNCIONARIO si es así agregar esa línea al ListView, de lo contrario descartarla y continuar con la siguiente. De esta forma tendrías en el ListView únicamente los funcionarios y no toda la información.
    2. Al hacer doble clic sobre un ítem del ListView tomar el texto de ese ítem, usar la función Split poniendo como delimitador el espacio y tomando el segundo valor del array que se crea (el cual corresponde a la identificación del funcionario) y con ese valor recorrer de nuevo el archivo txt línea por línea hasta encontrar ese valor, una vez lo encuentre empezar a leer y mostrar en pantalla las siguientes líneas hasta que aparezca de nuevo la palabra FUNCIONARIO que significaría que es un nuevo registro y ahí se detendría la lectura del archivo.

    No es tan difícil solo es cuestión de ir probando con las funciones que te indico. Cualquier duda comentas,
    HERNAN GUILLERMO SIABATO M.
    Medicina - UPTC
    chronos682@hotmail.com

    Comentario


    • #3
      Hola chrono682, tienes razón la solución no es tan dificil, lo dificil es que hay más de 400 funcionarios, por lo cual debo de tener una manera de buscar el funcionario específico por eso coloqué un textbox para digitar el documento del funcionario. Mirandolo bien creo que lo mejor es que recorra línea por línea hasta encontrar el documento, a esa línea le reste 5 (o sea que si el documento esta en la línea 1725 comience a cargar en la 1720) y que extraiga las siguientes 36 renglones, ya que la mayoría de los funcionarios tiene más de un recibo cómo el ejemplo (en el ejemplo dice FINCIONARIO 1 y FUNCIONARIO 2 porque sustituí los nombres reales como así también documentos y valores de cobro) .
      No sé si logras entender lo que deseo hacer....Gracias por tomarte el tiempo en responder

      Comentario


      • #4
        No veo el nombre del funcionario por ninguna parte; así que tendrás que buscar por su Número de Funcionario.

        Si defines las variables
        Código:
        cBuscIni = "Nro.Func: "
        cBuscFin= "Nro. Recibo:"
        y buscas ambos valores en el documento, podrás comprobar si el contenido entre ambos es el valor de tu textbox (909275 / 909299) y en caso afirmativo extraer los datos que precises.
        José María Movilla Cuadrado
        ______________________
        Normas del foro
        www.foro.vb-mundo.com
        www.vb-mundo.com

        Comentario


        • #5
          Estimado Movilla, cómo expliqué más arriba, sustituí el nombre del funcionario por FUNCIONARIO 1 y FUNCIONARIO 2. Igual me interesa buscar por documento que es el número que sigue al nombre del funcionario en el caso del funcionario 2 es el 2345678, por lo pronto yo he llegado hasta aquí:

          Código HTML:
          Private Sub Cargartxt()
          Me.List1.Clear
          Dim BuscarDocumento As String
          
          Dim strRuta As String 'declaras una variable en donde pones la ruta del archivo
          
          Dim strLinea As String 'declaras otra variable en donde pones la linea que estas leyendo
          
          Dim StrMesDeRecibo As String
          StrMesDeRecibo = FormLeerRecibos.ListMeses.Text
          
              
          strRuta = "C:\Pryecto recibo\Recibos" & StrMesDeRecibo & ""
              
          Open strRuta For Input As #1 'Con esto abres el archivo
          
              While Not EOF(1)
                  Line Input #1, strLinea 'y con esto lees linea por linea
                      If InStr(strLinea, TextDoc) <> 0 Then
                          List1.AddItem strLinea
                      End If
              Wend
          Close #1 'con esto se cierra el archivo
          End Sub
          Pero solamente me lee la línea que tengo el documento, necesito leer desde 5 anteriores a 36 más (líneas totales del recibo). Gracias por tu tiempo...
          Última edición por jose356; 26-12-2016, 08:19 PM.

          Comentario


          • #6
            Claro: La línea
            Código:
            If InStr(strLinea, TextDoc) <> 0 Then
            está haciendo que sólo se incremente en el List1 la línea que contiene el TextDoc (que supongo que sea el núm. de usuario)... Quita esa línea condicionante.

            Una vez tengas todo el documento en el List1, ya podrás seleccionar las líneas que te interesen. En principio el List1 lo haces invisible, y le pones visible después de filtrar esas líneas correspondientes al usuario seleccionado.
            José María Movilla Cuadrado
            ______________________
            Normas del foro
            www.foro.vb-mundo.com
            www.vb-mundo.com

            Comentario


            • #7
              Estimado Movilla, cómo siempre, estoy agradecido por tu interés pero estoy necesitando una guía de cómo escribir el coodigo porque no me logro despachar con él indicado, je.....

              Comentario


              • #8
                Estimados amigos foreros.... El código al final lo he dejado asíy me funciona bien:

                Código:
                Private Sub Cargartxt()
                On Error Resume Next
                If (TextDoc < 1) Then
                    MsgBox "Debe digitar un documento para continuar"
                Else
                
                    Me.List1.Clear
                    Dim BuscarDocumento As String
                    Dim strRuta As String
                    Dim i As Long
                    Dim j As Long
                    Dim f As Integer
                    Dim strLinea As String
                    Dim miColeccion As New Collection
                    Dim StrMesDeRecibo As String
                
                    StrMesDeRecibo = FormLeerRecibos.ListMeses.Text
                
                    strRuta = "C:\Pryecto recibo\Recibos\" & StrMesDeRecibo & ""
                
                    Open strRuta For Input As #1
                    '---------------------------------------------------------------------------------
                     For f = 0 To ListMeses.ListCount - 1
                         If ListMeses.Selected(f) = True Then
                    
                            Do While Not EOF(1)
                                Line Input #1, strLinea
                                miColeccion.Add strLinea
                            Loop
                            For i = 1 To miColeccion.Count
                                If InStr(miColeccion(i), TextDoc) <> 0 Then
                                    For j = i - 5 To i + 27
                                        List1.AddItem miColeccion(j)
                                    Next j
                                End If
                            Next i
                        End If
                
                    Next f
                
                    Close #1
                End If
                
                End Sub
                Quisiera, ya que he colocado un listbox con casilla de verificación al lado del listbox a donde extrigo el recibo, extraer el recibo del mismo funcionario para cada casilla del listbox que halla seleccionado, o sea para cada mes seleccionado. Pero no logro que me funcione, tal vez estoy colocando mal la sentencia....como les parece que lo solucione?
                Última edición por J_M_Movilla; 27-01-2017, 10:13 PM. Razón: Amigo jose356: Perdona que no pueda solucionar tu problema, porque llevo una temporada sin tiempo para nada...

                Comentario

                Trabajando...
                X