Ir al contenido principal

interactuar con dos archivos de texto

En este link podrán tener acceso a la entrada que dió origien al planteamiento de Luis, quien necesita trabajar con dos archivos de texto, tomando cierta información de uno y volcándola a otro TXT, sin la necesidad de migrar esos registros a Excel. En varias ocasiones me tocó trabajar con archivos de texto con información tan heterogénea y mal distribuída, que necesité "depurar" el TXT de origen en uno nuevo, y luego sí esos datos (ya limpios y ordenados) enviarlos a Excel para su almacenamiento / análisis.
Luis me dice que tiene estos registros dentro del TXT:
dentro de el se describen una serie de actividades diarias


Y quiere enviar a otro archivo de texto solo la cantidad de horas dormidas:
en esta imagen podemos apreciar solo los valores numéricos correspondientes a las horas dormidas, las cuales deben quedar guardadas en un nuevo TXT
[+/-] Ver el resto / Ocultar

Comentarios

  1. Qué grande eres Damián!

    Me has ahorrado mucho tiempo de investigación puesto que yo justo acabo de adentrarme en esto de las macros y estoy bastante perdido.

    He conseguido adaptar tu código a mi caso concreto. Sólo me quedaba un detalle por solucionar pero mientras te escribía la duda se me encendió la luz.

    Entiendo que lo que se hace con Split es segmentar las cadenas de texto encontradas con la palabra "duermo" en columnas separadas por un carácter o caracteres concretos, en nuestro caso el carácter espacio " ". Mi problema es que yo necesitaba en realidad lo que había después del segundo espacio. Entonces he cambiado Matriz (1) por Matriz (2) y ha dado resultado. En el ejemplo lo que obtendríamos sería este texto:

    horas
    horas
    horas

    Continúo con mi proyecto. Seguramente me vea obligado a consultarte algo más.

    Muchas gracias.
    Saludos.

    ResponderEliminar
  2. perfecto, te agradezco mucho que me avises y también tus palabras. no dudes en consultarme sobre lo que necesites.
    efectivamente Split(cadena, delimitador) convierte una cadena de texto en una matriz. en tu ejemplo, y para separar cada elemento y colocarlo dentro de un espacio en el array, utilizamos el espacio en blanco ( " " ), pero podría ser cualquier caracter.
    si tengo la cadena: "a-b-c-d" y hago:
    Matrix = Split("a-b-c-d", "-") obtengo la matriz:
    a
    b
    c
    d
    y puedo acceder a cualquier elemento.
    es una alegría saber que el ejemplo te sirvió.
    salu2.xls

    ResponderEliminar
  3. ahora que releo tu entrada noto algo extraño... pero bueno, si te funciona, dejalo así.
    te comento: todos los índices de las matrices en visual basic se inicializan en 0 (cero). o sea que si tengo una matriz con 5 elementos se codificaría de la siguiente forma:
    matrix(0)
    matrix(1)
    matrix(2)
    matrix(3)
    matrix(4)

    en tu caso llevo la cadena:
    duermo 7 horas
    a una matriz de 3 elementos, con Split()
    me queda:
    matrix(0)=duermo
    matrix(1)=7
    matrix(2)=horas
    ¿me seguís? por eso en mi ejemplo puse
    matrix(1)
    ya que la segunda posición de la matriz (que la identifico con el numero 1, por que todas las matricies inicializan en cero) es la correspondientes a las horas. quizas en tu archivo exista algún espacio de texto adicional y por eso debiste cambiarle el índice.

    o bien, y problablemente sea esto, en algún módulo tenes la instrucción "Option Base 1", que fuerza a visual basic a inicializar todas las matrices con el índice 1, en lugar de cero.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

funciones: convertir numeros a letras con excel

En realidad hace tiempo que vienen consultándome sobre esto... quizás cinco o seis años . Debe ser una de las funciones mas buscadas de Excel, por lejos: la posibilidad de escribir: 1.534,63 y que en una celda aparezca magicamente "un mil quinientos treinta y cuatro c/15/100". Aquí les dejo una solución, basada en funciones , sin utilizar macros, la cual preparé exclusivamente para este Blog. A pesar de los millones de usuarios que requieren esta herramienta, no viene incorporada en Excel, debemos armarla nosotros mismos .  Luego de la imagen irá la explicación de como llegué a lograr esto, dado que es un proceso medianamente complejo , que utiliza tres o cuatro funciones básicas y requiere de varios pasos. así quedará nuestra planilla y siempre devolverá en letras el valor que ingresemos en A1 [+/-] Ver el resto / Ocultar Desde ya aclaro: esta no es " la forma " de hacerlo, simplemente es una mas, evitando el uso de macros. Sobre esta base, comencemos: 1) El núme

macros: como enviar mails desde Excel (vba)

Un gran amigo "on-line", Johan Moreno, de Colombia , me hizo llegar la inquietud de cómo enviar mails desde Excel . Si bien contaba con algunas líneas de código sobre el particular, decidí retomar mi ejemplo y adaptarlo mejor a las circunstancias. Hace unos minutos termino de remitirle un correo con la solución a Johan... desde Excel y con un archivo adjunto, mismo que transcribo a continuación para ayudar a todos con esta tarea. Veamos primero las dos formas principales de enviar mails: mediante Outlook o nuestro Web Mail ( yahoo, gmail, hotmail, etc, etc ) No soy usuario de Outlook en lo absoluto: no confío en los agujeros de seguridad que continuamente aparecen y, por otro lado, t eniendo a mi alcance una herramienta tan poderosa (y gratuita) como Gmail, la cual ahora también permite sincronizar los mensaje con la Pc para verlos offline (deben activarlo en "google labs") ... no creo que me haga usuario ni hoy ni mañana. Igualmente mas adelante daré una solució

buscarv con varios resultados

Es de las preguntas mas recurrentes que he tenido: ¿se puede lograr que la función BUSCARV() devuelva varios resultados? Si recordamos el uso de esta función, sabremos que la misma buscar en valor en el rango especificado, retornando un solo resultado. Si en la tabla tenermos varios registros iguales BUSCARV() solo nos devolverá el primero de ellos, omitiendo el resto. Entonces ¿se puede? Bueno, aplicando otra técnica sencilla que se me ocurrió al intentar solucionar el planteamiento de un lector... si, puedo hacerlo.... pero sin usar BUSCARV(). la idea es que coloquemos en E1 el código del producto a buscar y a partir de E2 nos devuelva todas las coincidencias de la tabla. [+/-] Ver el resto / Ocultar Vamos a necesitar una columna "auxiliar" para llevar a buen término este proyecto. Con macros el tema sería mas sencillo, pero aquí la cuestión es resolverlo con las funciones de Excel, sin VBA. Paso a paso: Como primer medida chequeamos que valores de la columna A coincide co