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


 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting (Moderador: Eleкtro)
| | |-+  Acciones sobre archivos de texto. [Batch]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 ... 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [33] 34 Ir Abajo Respuesta Imprimir
Autor Tema: Acciones sobre archivos de texto. [Batch]  (Leído 240,388 veces)
javiert239

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Acciones sobre archivos de texto. [Batch]
« Respuesta #320 en: 20 Junio 2015, 20:57 »

Yo tengo una consulta.
Tengo dos archivos, archivo1.txt y archivo2.txt.
El arhivo1 contiene lo siguiente:
Citar
Primera linea

Tercera linea

Quinta linea
El archivo2 contiene lo siguiente:
Citar

Segunda linea

Cuarta linea

Existe alguna forma de fucionar esos archivos de forma que las lineas queden en sus lugares correspondietes? Parecia algo bastante sencillo, pero el otro dia le di un millon de vueltas y no encotre ninguna forma.


En línea

Eleкtro
Novato Astral y
Moderador Global
***
Desconectado Desconectado

Mensajes: 9.104


El sentido común es el menos común de los sentidos


Ver Perfil
Re: Acciones sobre archivos de texto. [Batch]
« Respuesta #321 en: 21 Junio 2015, 00:31 »

Existe alguna forma de fucionar esos archivos de forma que las lineas queden en sus lugares correspondietes? Parecia algo bastante sencillo, pero el otro dia le di un millon de vueltas y no encotre ninguna forma.

En Batch sería algo MUY, MUY tedioso (e ineficiente) ya que no tiene soporte para Arrays; En cualquier otro lenguaje de verdad, sería algo muy sencillo.

Una manera general de llevar a cabo esa tarea sería iterar con un búcle las lineas de texto del primer archivo para añadir esas lineas a un Array, una vez hecho esto, ya tienes una colección indizada en la que poder comprobar si un elemento está vacío o no, para reemplazarlo/fusionarlo por el elemento con el mismo índice al iterar las lineas del segundo archivo.

Pseudo-Código:

Código:
declare linesCol(Array) = Null
declare mixedLinesCol(Array) = Null
declare index(Int32) = 0

For Each line(String) in textfile1.ReadToEnd:
    linesCol1(Index) = line
    Index += 1
End For

Index = 0 # Resetear el contador.
For each line(String) in textfile2.ReadToEnd:

    # Si la linea no está vacía, reemplazar por la linea original (o añadirla).
    if line.IsNotEmpty() Then
        linesCol1(Index) = line
    End If

    Index += 1
End For



Se que no es Batch, pero desarrollarlo en Batch sería perder el tiempo por que hay muchas mejores opciones, prefiero aportarte una alternativa mejor, mostrándote este código funcional (y eficiente) desarrollado en VB.NET:
Código
  1. Dim textLineCol1 As IEnumerable(Of String) =
  2.    File.ReadAllLines("Archivo 1.txt", Encoding.Default)
  3.  
  4. Dim textLineCol2 As IEnumerable(Of String) =
  5.    File.ReadAllLines("Archivo 2.txt", Encoding.Default)
  6.  
  7. Dim mixedLineCol As New List(Of String)
  8.  
  9. For index As Integer = 0 To (textLineCol2.Count - 1)
  10.  
  11.    Dim curLine As String = textLineCol2(index)
  12.  
  13.    If (textLineCol1.Count <= index) OrElse (Not String.IsNullOrWhiteSpace(curLine)) Then
  14.        mixedLineCol.Add(curLine)
  15.  
  16.    Else
  17.        mixedLineCol.Add(textLineCol1(index))
  18.  
  19.    End If
  20.  
  21. Next index
  22.  
  23. File.WriteAllLines("Fusionado.txt", mixedLineCol, Encoding.Default)

Archivo 1.txt:
Código
  1. Linea1
  2.  
  3. Linea 3
  4.  
  5. Linea 5

Archivo 2.txt:
Código
  1.  
  2. Linea 2
  3.  
  4. Linea 4
  5. Linea5 - Nueva
  6. Linea 6

Archivo Combinado.txt:
Código
  1. Linea1
  2. Linea 2
  3. Linea 3
  4. Linea 4
  5. Linea5 - Nueva
  6. Linea 6

Saludos!


« Última modificación: 21 Junio 2015, 02:47 por Eleкtro » En línea


javiert239

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Acciones sobre archivos de texto. [Batch]
« Respuesta #322 en: 21 Junio 2015, 10:10 »

Muchas gracias, eso era exactamente lo que queria hacer. Lo probe y funciono sin ningun problema. Muchas gracias de nuevo.
En línea

DonnySantiago

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Acciones sobre archivos de texto. [Batch]
« Respuesta #323 en: 26 Agosto 2015, 18:18 »

Hola buen dìa,

Soy nuevo en esto , tengo un archivo .txt que tiene cierto contenido xml , como por ejemplo :
<nombre> Donny </nombre>
Pero hay casos que este archivo contiene etiquetas de contenido vacio como por ejemplo:
<Numero> </numero>
Mi duda es la siguiente , como harìa para eliminar esas etiquetas de contenido vacio, claro esta que esas etiquetas pueden varias no solo serà <Numero></Numero> , sino tambien aparecerán etiquetas como <Direccion></Direccion> que también tendrán contenido vacio , esto lo puedo hacer con archivo batch ?
En línea

nyoz

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Acciones sobre archivos de texto. [Batch]
« Respuesta #324 en: 3 Septiembre 2015, 20:59 »

Buenas tardes,

tengo el siguiente código:

Código:
@echo off
del contador.log

FOR %%F IN (lis0*.txt) DO (
set /a contador=0
for /f "tokens=*" %%_ in (%%F) do (
set /a contador+=1
)
echo %%F>>contador.log
call :imprimir
)

:imprimir
echo %contador%>>contador.log

El código funciona para contar la cantidad de filas de un archivo de texto con la estructura: lis0*.txt, pero necesito ejecutarlo en un árbol de carpetas para todos los archivos con esa estructura, no sólo en la carpeta donde se ejecuta el bat.

Adicional, el log que sale es de la siguiente manera:

Citar
lis001_100_20150903.txt
29366
lis003_100_20150903.txt
366
lis004_100_20150903.txt
66
lis013_100_20150903.txt
293
293

Donde se repite el último número (no debería) o al menos así debería quedar el log:

Citar
lis001_100_20150903.txt|29366
lis003_100_20150903.txt|366
lis004_100_20150903.txt|66
lis013_100_20150903.txt|293

Desde ya les agradezco la colaboración.
En línea

Eleкtro
Novato Astral y
Moderador Global
***
Desconectado Desconectado

Mensajes: 9.104


El sentido común es el menos común de los sentidos


Ver Perfil
Re: Acciones sobre archivos de texto. [Batch]
« Respuesta #325 en: 14 Septiembre 2015, 08:47 »

El código funciona para contar la cantidad de filas de un archivo de texto con la estructura: lis0*.txt, pero necesito ejecutarlo en un árbol de carpetas para todos los archivos con esa estructura, no sólo en la carpeta donde se ejecuta el bat.

Entonces utiliza un For /R.



Adicional,

Donde se repite el último número (no debería)

Puedes utilizar el comando FIND para contar lineas.

Aquí tienes el código funcional:
Código
  1. @Echo Off & Setlocal EnableDelayedExpansion
  2.  
  3. Set "filePattern=lis0*.txt"
  4. Set "logfile=.\Contador.log"
  5.  
  6. (FOR /R %%F IN ("%filePattern%") DO (
  7.    For /F %%v in ('Find /V /C "" ^< "%%~fF"') Do (Set /A "count=%%v")
  8. Echo %%~nxF^|!count!
  9. ))>"%logfile%"
  10.  
  11. Type "%logfile%"
  12.  
  13. Pause&Exit /B 0

Saludos!
« Última modificación: 14 Septiembre 2015, 08:53 por Eleкtro » En línea


layra

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Acciones sobre archivos de texto. [Batch]
« Respuesta #326 en: 24 Septiembre 2015, 18:01 »

 :silbar: Como puedo extraer información de una base de datos de SQl serve 2008 con un archivo batch -- por favor ayudenmeeeeee siiiiiii  :-(  :-(
En línea

elqueteconte

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: Acciones sobre archivos de texto. [Batch]
« Respuesta #327 en: 7 Octubre 2015, 23:12 »

Saludos;

He heredado el siguiente script:

copy /y blancos\*.TXT .

copy CM.txt + C:\carp1\Emp1\20150908\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150908\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150908\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150908\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150908\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150908\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150909\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150909\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150909\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150909\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150909\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150909\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150910\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150910\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150910\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150910\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150910\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150910\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150911\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150911\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150911\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150911\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150911\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150911\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150912\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150912\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150912\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150912\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150912\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150912\IMP6003.txt IMP6003.txt

Como pueden ver la variable "carp1"; "Emp1" son constantes pero la carpeta siguiente corresponde a los días del mes.

La idea es como hago para que cuando ejecuto el script le pase por parámetro el nombre de la Empresa y haga un recorrido por las carpetas que y vaya haciendo la copia hasta que consiga la ultima carpeta.

Desde ya mil gracias....
En línea

sorry

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Acciones sobre archivos de texto. [Batch]
« Respuesta #328 en: 23 Octubre 2015, 12:30 »

Buenas!!

No se si es posible, a ver que me contáis.

Me gustaría añadir el texto de un documento a otro en una zona concreta, después de una palabra para ser exactos.

Esto es posible?

Muchas gracias
En línea

Eleкtro
Novato Astral y
Moderador Global
***
Desconectado Desconectado

Mensajes: 9.104


El sentido común es el menos común de los sentidos


Ver Perfil
Re: Acciones sobre archivos de texto. [Batch]
« Respuesta #329 en: 23 Octubre 2015, 13:08 »

añadir el texto de un documento a otro en una zona concreta, después de una palabra para ser exactos.

Se puede llevar a cabo, pero sería demasiado tedioso de conseguir y el resultado sería un código demasiado sucio e ineficiente. Esa tarea es algo muy complejo para un lenguaje limitado como es Batch.

El primer problema que se me ocurre es que tendrías que idear un tedioso algoritmo que iterarase todos los caracteres del archivo objetivo delimitándolo por el caracter espacio " " para poder identificar palabras hasta encontrar la palabra donde quieres insertar texto... sería como reinventar la rueda.

En este script que desarrollé hace tiempo, puedes encontrar algunos ejemplos de manipulación de texto, los cuales de por si ya son un lio.
[BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto

No vale la pena el esfuerzo, ya te aviso. Tu mejor opción es usar un lenguaje apto.

En VBS podrías utilizar el método "Split" para partir el texto en dos según la palabra especificada, o también podrías utilizar una expresión regular para obtener la palabra y su posición.

En otros lenguajes más sofisticados como por ejemplo VB.Net/C# (solo por nombrar a los que estoy acostumbrado) sería mucho más sencillo, podrías utilizar las metodologías mencionados plus la función "String.IndexOf" y muchas otras más formas de llevarlo a cabo.

Saludos
« Última modificación: 23 Octubre 2015, 13:14 por Eleкtro » En línea


Páginas: 1 ... 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [33] 34 Ir Arriba Respuesta Imprimir 

Ir a:  

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