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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Comparar líneas VBS
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Comparar líneas VBS  (Leído 2,614 veces)
Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Comparar líneas VBS
« en: 30 Junio 2008, 17:28 pm »

Buenas, una vez más, estaba viendo la solución a uno de los problemas planteados en batch, en este caso es el de Shinseiki86, que quería comparar líneas en un archivo de texto, y que las que estuviesen repetidas, fueran volcadas a un otro archivo de texto a modo de registro....

En batch, esto puede resultar muy complicado, por no decir imposible (por lo que, ni me he complicado :rolleyes:), pero en *.vbs, esto resulta mucho más fácil..... así que he creado el siguiente script....

Este no solo revisa la línea siguiente, como planteaba Shinseiki86, sino que revisa todas y cada una de las líneas, por lo que, para un archivo de 3000 líneas(se planteaba en el caso original), el script realiza unas 4500000 comparaciones, en menos de un minuto (Pentium IV, 1 Gb de ram), una vez terminado, vuelca las líneas repetidas en un archivo (creado en los temporales) y lo ejecuta para su visualización.

Durante el proceso se verán mensajes del progreso (simples popup), los cuales avisaran cada 10%  :P

Esta la posibilidad de hacer un script más vistoso, en el cual, en lugar de los popup se muestre una barra de progreso creada en iexplorer, pero el kaspersky lo detecta como amenaza porque se intenta crear algo con el iexplorer  :¬¬

En definitiva.... este es el script  :P (creado en un rato de distracción en el curro XD)

Código:
set objfso = createobject("scripting.filesystemobject")
set objshell = createobject("wscript.shell")
set archivo = objfso.opentextfile("c:\origen.txt",1)

archivo.readall
lineast = archivo.line
archivo.close
upro = 0

for n = 1 to lineast - 1

set archivo = objfso.opentextfile("c:\origen.txt",1)

if n > 1 then
for e = 1 to n - 1
archivo.skipline
next
end if

lineaa = archivo.line
primeral = archivo.readline

for i = 1 to lineast - lineaa
segundal = archivo.readline
if segundal = primeral and instr(1,registro,segundal,1) = 0 then
registro = registro & segundal & ";"
exit for
end if
next

archivo.close
pro = int((100/lineast)*n)

if pro <> upro and int(pro/10) = (pro/10) then
progreso =  objshell.popup(pro & "%",1,"Progreso...")
objshell.AppActivate "Progreso..."
upro = pro
end if

next

set destino = objfso.createtextfile(objfso.getspecialfolder(2) & "\resultado.txt",true)
renglones = split(registro,";")

for each r in renglones
destino.writeline r
next

msgbox "Proceso terminado..."
objshell.run objfso.getspecialfolder(2) & "\resultado.txt"

El archivo de origen (el que tiene las líneas a compar) debe de estar en c:\origen.txt), como ejemplo, un archivo con el siguiente texto...

2008-06-19_590059_NI_890807898_EPS018_86_I.TXT
2008-06-19_621451_NI_890706425_EPS018_86_I.TXT
2008-06-19_621451_NI_890706425_EPS018_86_I.TXT
2008-06-19_621452_NI_890706425_EPS018_86_I.TXT
2008-06-19_621517_NI_810001583_EPS018_86_I.TXT
2008-06-20_102019121_CC_94487480_EPS018_51_I.TXT
2008-06-20_102019121_CC_94487480_EPS018_51_I.TXT
2008-06-20_102088573_CC_5931385_EPS018_01_I.TXT
2008-06-20_102718305_CC_33966379_EPS018_01_I.TXT
2008-06-20_102718305_CC_33966379_EPS018_01_I.TXT
2008-06-20_103000920_CC_31992855_EPS018_01_I.TXT
2008-06-20_103000920_CC_31992855_EPS018_01_I.TXT
2008-06-20_103161002_CC_16638978_EPS018_01_I.TXT

Arrojaría como resultados, un archivo con esto....

2008-06-19_621451_NI_890706425_EPS018_86_I.TXT
2008-06-20_102019121_CC_94487480_EPS018_51_I.TXT
2008-06-20_102718305_CC_33966379_EPS018_01_I.TXT
2008-06-20_103000920_CC_31992855_EPS018_01_I.TXT
(son los que se ven marcados en rojo arriba, y que en definitva están repetidos)

Bueno, eso es todo, en definitiva, un code más para que pueda servir como ejemplo, y quizás le sirva a Shinseiki86 ;D

Mensaje original donde se plantea la consulta

Saludos

P.D1: el code queda más legible si lo pongo entre etiquetas GeSHi, pero a la hora de copiar el code en el notepad se desordena todo  :¬¬

P.D2:También pongo este code por separado del original porque la consulta era en batch, y para no mezclar el post de Programación BATCH Avanzada. (nuevo) con *.vbs  :P


« Última modificación: 30 Junio 2008, 17:46 pm por Novlucker » En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
descargar y comparar
Programación Visual Basic
CAR3S? 4 2,299 Último mensaje 18 Marzo 2011, 03:25 am
por 79137913
Comparar líneas de archivos [vbs]
Scripting
adberik2005 0 3,238 Último mensaje 17 Junio 2011, 18:17 pm
por adberik2005
comparar IP´s
Dudas Generales
darchi 0 3,035 Último mensaje 20 Julio 2011, 17:37 pm
por darchi
Comparar matrices
Programación C/C++
FranAI 2 2,820 Último mensaje 17 Mayo 2020, 21:02 pm
por FranAI
comparar dos móviles
Dispositivos Móviles (PDA's, Smartphones, Tablets)
inma55 7 6,360 Último mensaje 17 Noviembre 2023, 11:13 am
por inma55
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines