Bat para juntar 2 ficheros txt en 1 por lineas

Iniciado por maschino2, 21 Julio 2010, 17:33 PM

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

maschino2

Buenas

Estoy haciendo un bat que lee 2 ficheros txt distintos y escribe en otro mas uniendo la linea 1 de cada fichero.
SI el fichero 1.txt tiene
1
2
3
4
5
Y el fichero a.txt tiene
a
b
c
d
e
lo que busco es generar un fichero que sea
texto mio 1
texto mio a
texto mio 2
texto mio b
texto mio 3
texto mio c
texto mio 4
texto mio d

Consigo leer el fichero y darle el formato con un solo fichero usando un for /f %%I IN (1.txt) do
pero no se como leer el segundo sin que se me duplique todo, ya que si lo meto otro for dentro, me lo duplica todo...

He estado echando un vistazo por el foro, y he visto que separais en 2 ficheros uno, pero no unis por lineas...

Me podriais echar una manita??? Gracias

flony

#1
bueno como es costumbre te van a decir q no se hace trabajos....lo cual es verdad aunque suene chocante  :-\ pero te doy unas ideas y las vas a tener que modificar como te guste a vos como son iguales te muestro para un txt y vos lo vas intercalando para 1.txt y a.txt  para colmo va a ser modular la cosa xq es un poco complejo ;)
primero contar los renglones de  1.txt para saber cuando no queden mas renglones  :laugh:
:variables
set /a contador=0
for /f "tokens=*" %%_ in (1.txt) do (
set /a contador+=1)
set /a var=%contador%

despues fijarte si la variable "var" es igual a cero asi deja de trabajar por medio de bucles, si no es asi copie y borre una linea
set var=%a%
linea=0
:bucledelprimertxt
set /a linea=%linea%+1
if %var%==0 (goto echo listo) else set /A var=%var%-1
<"1.txt" set /p "primera_linea="
set "primera_linea"
(
ECHO 1d
ECHO E
) | EDLIN /B 1.txt > nul 2>&1
::aca iria la duplicacion para a.txt
goto bucledelprimertxt

bue es una idea cubriria los dos txt de una obvio intercalando las filas...pero bue a modo de ejemplo y que averigues un poquito http://foro.elhacker.net/scripting/acciones_sobre_archivos_de_texto_batch-t242748.0.html
para adaptarlo te puede servir....pero leo es mas especialista en el trabajo de textos en bat  ;D
si un problema no tiene solucion entonces no es un problema...es algo inevitable

maschino2

Lo primero de todo, gracias por la ayuda. Siempre es de agradecer que te echen una mano.
No busco el que me hagan el script, ya que ya le tengo casi hecho (a excepcion de ese pequeño gran detalle), pero no conseguia saber como pelearme con 2 ficheros a la vez (con uno si suelo) para generar un tercero... Probare a ver que consigo con lo que me dices a ver si consigo lo que quiero...

Thank you...

maschino2

Otra pregunta rapida...
De un solo fichero de texto se podria guardar en un bucle for toda la linea por un lado y ldistintos tokens por otro???
Me explico.. si mi fichero es:
pepito.1.verde.perro
juanito.2.azul.gato

Podria con un bucle for guardar en distintas variables por un lado la linea entera y por otro las variables separadas por el "."

Podria ser algo asi?
for /f %%linea in (1.txt) do (
for /f "tokens=1,2,3,4 delims=." %%A in (%%linea) do (
echo %%linea
echo %%C
echo %%B
echo %%A
)
)

No me funciona... pero no veo donde tengo el problema... (aparte del de no tener mucha idea, logicamente, jejjeje)

flony

#4
a ver lo de hacer guardar la linea y que guarde cada palabra de la linea en variables distintas todo dentro del mismo "ciclo" por definirlo de alguna forma :rolleyes: me parece parecido a lo que intente hacer hace un tiempo  :) es como trabajar con vectores y no se puede  :-\ , podemos intentar simularlos  :silbar: pero bue es no ...ahora como no hay que darse por vencido y se puede siempre buscar la vuelta
de ultima lee lo que hice y fijate si te sirve es una simulacion de un vector jajaja no es por hacer propaganda pero parece lo que queria hacer  :silbar:
http://foro.elhacker.net/scripting/vectores_solucionado-t297506.0.html
che una cosita q vi en tu code para que salga en pantalla una variable es echo %variable% no echo %%variable
si un problema no tiene solucion entonces no es un problema...es algo inevitable

leogtz

#5
Puedes guardar cada línea de los archivos en sus respectivos arrays, luego recorrerlos simultáneamente.

O crear un script en el que le indiques la línea que quieres mostrar y te la muestre, no debe de ser muy difícil.
Código (perl) [Seleccionar]

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

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

maschino2

#6
Muchas gracias a todos
Al final, la opcion que puse arriba si me funciono, con alguna modificacion...
For /F %%A IN (imagenes.txt) DO (
   for /F "tokens=1-7,8* delims=." %%a in ("%%A") do (
       echo %%A
       echo %%a
       echo %%b
       echo %%c
       echo %%d
       echo %%e
       )
)

La opcion de usar 2 arrays no la conozco en batch, pero si me pudieras indicar como hacerlo estaria bien..
El hacerlo en perl con 2 arrays (que hubiera sido lo mas sencillo me imagino) no era una opcion, ya que la ejecucion va sobre win y tendria que meterselo a las maquinas donde se ejecuta el local (opcion no viable)

Muchas gracias a todos por la ayuda

Por cierto, a alguno se le ocurre como eliminar las lineas duplicadas de un TXT quitandole antes los caracteres a partir de un caracter?? E intentado jugar de nuevo con 2 bucles, pero en la comparacion solo consigo o dejarlo como esta, o duplicar mas lineas...