Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: FranciskoAsdf en 26 Marzo 2011, 13:40 pm



Título: [BATCH](SOLUCIONADO)Disminuir nombres repetidos a 1 solo
Publicado por: FranciskoAsdf en 26 Marzo 2011, 13:40 pm
Estimados, buenas :D xD

Espero me puedan ayudar con esto, es super simple (la pregunta xD) pero no se me ocurre como hacerlo.

Lo que pasa es que tengo un Script que me muestra los proveedores a los que tengo que hacerles pedido segun el dia que le consulte, el problema es que me genera algo como lo siguiente :

Código:
Des_Proveedor 
3M CHILE S.A.
3M CHILE S.A.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ADELCO CHILLAN
ADELCO CHILLAN
ADELCO CHILLAN
ADELCO CHILLAN
ADELCO CHILLAN
AGROCOMERCIAL CODIGUA LTDA.
AGROCOMERCIAL CODIGUA LTDA.
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS

Obviamente no voy a colocar los mas de 2000 registros que contiene el .txt xD

Bueno al grano, quisiera saber como puedo hacer para procesar el archivo y que reduzca a 1 sola vez el nombre del proveedor xD? se entiende?. O sea que en vez que AGROSUPER salga 50 veces, salga una vez.

Necesito que sea una sola vez por proveedor porque quiero mostrar por pantalla los proveedores por dia, pero seria un poco engorroso mostrarlos todos xD.

El objetivo del script es ayudarme a ordenar las compras. Lo haria en una planilla Excel, pero me mata otros datos que necesito vizualizar.

Sin otro particular y esperando me puedan ayudar. Me despido. Saludos ;D!


Título: Re: [BATCH]Disminuir nombres repetidos a 1 solo
Publicado por: SuperDraco en 26 Marzo 2011, 14:13 pm
Esta bien, no copies las 2.000 lineas, pero porfavor pon el codigo o la parte que nos interesa para poder ayudarte, sino, no se como... pero lo que se me ocurre a simple vista y sin ver el codigo, es que pases los parametos a | Find para borrar nombres duplicados (Con un if)

saludosss

Código
  1. for /f %%a in ('type archivo.txt') do (
  2.  
  3. set Nombre=%%a
  4. echo %%a | find /C "3M CHILE S.A."
  5. call:duplicado
  6.  
  7. :duplicado
  8. If %errorlevel% equ 0 (
  9. goto:eof
  10. ) ELSE (
  11. echo %%a >> archivo.txt
  12. goto:eof)

esa es mas o meons mi idea, aunque tiene fallos, no hace lo que pides asi que no lo pruebes, ya he dicho que es una idea para perfeccionar, hace falta una variable que no cambie con el primer nombre de proveedor, y luego una segunda que vaya probando los otros nombres en mi idea, como no puedo ver el código no voy a seguir haciendo ese codigo, es una idea xD.

Saludos



Título: Re: [BATCH]Disminuir nombres repetidos a 1 solo
Publicado por: FranciskoAsdf en 26 Marzo 2011, 14:40 pm
No sé que codigo quieres ver xD, proque no tienen relacion con lo que quiero hacer, los que tengo me van limpiando el archivo segun mi consulta hasta que queda asi, solo me falta eliminar los duplicados, se me ocurre que con un FOR (seria los mas rapido supongo), pero como FOR definitivamente no es algo que maneje, no se me ocurre que colocarle xDD

Pero gracias por el intento, voy a ver si es que lo puedo modificar xD


Saludos.



Título: Re: [BATCH]Disminuir nombres repetidos a 1 solo
Publicado por: leogtz en 26 Marzo 2011, 17:58 pm
Mira, el siguiente script funciona, aclaro que yo no lo hice, lo tenía guardado de hace mucho, no sé de quien sea, así que aclaro, no es mío. Lo adapté y funciona.

Código:
C:\>type file.txt
Des_Proveedor
3M CHILE S.A.
3M CHILE S.A.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ADELCO CHILLAN
ADELCO CHILLAN
ADELCO CHILLAN
ADELCO CHILLAN
ADELCO CHILLAN
AGROCOMERCIAL CODIGUA LTDA.
AGROCOMERCIAL CODIGUA LTDA.
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
C:\>


Código:
C:\>code

C:\>type final.txt
Des_Proveedor
3M CHILE S.A.
ABASTECEDORA DEL COMERCIO LTDA.
ABU GOSCH ZONA FRANCA
ADELCO CHILLAN
AGROCOMERCIAL CODIGUA LTDA.
AGROSUPER COMERCIALIZ.DE ALIMENTOS

C:\>

Código
  1. @echo off
  2. for /f "tokens=*" %%s in ('type "file.txt"') do (
  3. set "record=%%s"
  4. call :output
  5. )
  6. goto :EOF
  7.  
  8. :output
  9. if not defined prev_rec goto:write
  10. if "%record%" EQU "%prev_rec%" goto:EOF
  11.  
  12. :write
  13. @echo %record% >> final.txt
  14. set "prev_rec=%record%"


Título: Re: [BATCH]Disminuir nombres repetidos a 1 solo
Publicado por: FranciskoAsdf en 26 Marzo 2011, 19:22 pm
Leo *O*!!, muchas gracias funciona a la perfección !!!!!!

Muchas gracias de verdad !!!

:D!


Título: Re: [BATCH](SOLUCIONADO)Disminuir nombres repetidos a 1 solo
Publicado por: leogtz en 26 Marzo 2011, 20:49 pm
De nada.


Título: Re: [BATCH](SOLUCIONADO)Disminuir nombres repetidos a 1 solo
Publicado por: al3xand3r- en 24 Junio 2011, 15:48 pm
hola.....
un favor grande!!! el codigo de leo funciona muy bien, pero como hago para que no me genere un nuevo archivo con los duplicados sino que los borre del archivo que esta buscando.

espero me entiendan..


Título: Re: [BATCH](SOLUCIONADO)Disminuir nombres repetidos a 1 solo
Publicado por: SuperDraco en 24 Junio 2011, 15:58 pm
hola.....
como hago para que no me genere un nuevo archivo con los duplicados sino que los borre del archivo que esta buscando.

Puedes usar SED, FART, o GREP.

http://foro.elhacker.net/scripting/batch_packs_de_aplicaciones_varias_commandlineinterface_actualizado_05mayo-t322976.0.html


Título: Re: [BATCH](SOLUCIONADO)Disminuir nombres repetidos a 1 solo
Publicado por: al3xand3r- en 24 Junio 2011, 19:11 pm
Me podria ilustrar como quedaria el codigo si no fuera mucha la molestia....


Título: Re: [BATCH](SOLUCIONADO)Disminuir nombres repetidos a 1 solo
Publicado por: FranciskoAsdf en 25 Junio 2011, 00:01 am
Código
  1. @echo off
  2. for /f "tokens=*" %%s in ('type "file.txt"') do (
  3. set "record=%%s"
  4. call :output
  5. )
  6. goto :EOF
  7.  
  8. :output
  9. if not defined prev_rec goto:write
  10. if "%record%" EQU "%prev_rec%" goto:EOF
  11.  
  12. :write
  13. @echo %record% >> final.txt
  14. set "prev_rec=%record%"
  15.  
  16. DeL /f /q file.txt
  17. REn final.txt file.txt

ASi quedaria :)


Título: Re: [BATCH](SOLUCIONADO)Disminuir nombres repetidos a 1 solo
Publicado por: al3xand3r- en 29 Junio 2011, 23:45 pm
hola Francisasdasd, lo que necesito es que solo me quede un archivo sin los datos duplicados el codigo que me colocaste me borra todo y me deja el dato que esta duplicado en el txt.

gracias     :huh:


Título: Re: [BATCH](SOLUCIONADO)Disminuir nombres repetidos a 1 solo
Publicado por: SuperDraco en 30 Junio 2011, 00:40 am

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%_ in ('type "file.txt"') do (
  4. set "record=%%_"
  5. call :output
  6. )
  7.  
  8.  
  9. DeL /f /q file.txt
  10. REn final.txt file.txt
  11.  
  12. :output
  13. if not defined prev_rec goto:write
  14. if "%record%" EQU "%prev_rec%" goto:EOF
  15.  
  16. :write
  17. echo !record! >> final.txt
  18. set "prev_rec=%record%"
  19. goto:eof
  20.  



Pruebalo, creo que no funciona correctamente :/

saludos


Título: Re: [BATCH](SOLUCIONADO)Disminuir nombres repetidos a 1 solo
Publicado por: FranciskoAsdf en 30 Junio 2011, 16:55 pm
Esta bien como lo modifico pitoloko, yo lo modifique pero no me di cuenta que esa funcion no tiene EOF (?) y tomaba toda la instruccion incluyendo el del y el ren xD.




Título: Re: [BATCH](SOLUCIONADO)Disminuir nombres repetidos a 1 solo
Publicado por: Turrete en 29 Diciembre 2011, 18:07 pm
Yo se que es un tema viejo, pero queria dar las gracias a Leo Gutiérrez por el script, hace dos semanas que busco algo asi para parsear un log.

Muchas gracias !!