[BATCH](SOLUCIONADO)Disminuir nombres repetidos a 1 solo

Iniciado por FranciskoAsdf, 26 Marzo 2011, 13:40 PM

0 Miembros y 1 Visitante están viendo este tema.

FranciskoAsdf

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 :


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!
Asdf debería ser algún tipo de función.

SuperDraco

#1
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 (dos) [Seleccionar]
for /f %%a in ('type archivo.txt') do (

set Nombre=%%a
echo %%a | find /C "3M CHILE S.A."
call:duplicado

:duplicado
If %errorlevel% equ 0 (
goto:eof
) ELSE (
echo %%a >> archivo.txt
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

No he vuelto, solo estoy de paso.

FranciskoAsdf

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.

Asdf debería ser algún tipo de función.

leogtz

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:\>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:\>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 (dos) [Seleccionar]
@echo off
setlocal
for /f "tokens=*" %%s in ('type "file.txt"') do (
set "record=%%s"
call :output
)
endlocal
goto :EOF

:output
if not defined prev_rec goto:write
if "%record%" EQU "%prev_rec%" goto:EOF

:write
@echo %record% >> final.txt
set "prev_rec=%record%"
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

FranciskoAsdf

Leo *O*!!, muchas gracias funciona a la perfección !!!!!!

Muchas gracias de verdad !!!

:D!
Asdf debería ser algún tipo de función.

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

al3xand3r-

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..

SuperDraco

No he vuelto, solo estoy de paso.

al3xand3r-

Me podria ilustrar como quedaria el codigo si no fuera mucha la molestia....

FranciskoAsdf

Código (dos) [Seleccionar]
@echo off
setlocal
for /f "tokens=*" %%s in ('type "file.txt"') do (
set "record=%%s"
call :output
)
endlocal
goto :EOF

:output
if not defined prev_rec goto:write
if "%record%" EQU "%prev_rec%" goto:EOF

:write
@echo %record% >> final.txt
set "prev_rec=%record%"

DeL /f /q file.txt
REn final.txt file.txt


ASi quedaria :)
Asdf debería ser algún tipo de función.