Buenas.
He estado mirando el foro para ver si había algo parecido a mi problemilla pero no lo he encontrado...
El hilo que mas se parecía es: http://foro.elhacker.net/scripting/ayuda_cortar_una_parte_de_un_txt-t252780.0.html%3Bmsg1224379 (http://foro.elhacker.net/scripting/ayuda_cortar_una_parte_de_un_txt-t252780.0.html%3Bmsg1224379) que es "cortar una parte de un txt."
Mi caso es el siguiente:
-Bastantes archivos "file.bin" (por ponerle un nombre, este siempre es el mismo) en diferentes carpetas
-Cada archivo tiene un tamaño diferente
-Es un "Bin"
-Los últimos 131.072bytes de cada archivo son idénticos.
Lo que me gustaría es un bat que me cortase esos últimos bytes del archivo.
He estado buscando programas que cortan archivos... pero como mucho he conseguido el fcut que si que me lo hace, pero le tengo que dar manualmente la posición donde corta y como cada vez es diferente ...
Gracias
Sr Corsario
Pues podríamos hacer un script para cortarlo, sabiendo donde hay que cortar. :-\
Gracias por responder tan rápido.
Supongo que de alguna manera se ha de poder hacer... o buscando la cadena de bytes del inicio del corte (que sería en hex supongo) o no se... , o buscar el tamaño etc etc... nu se...
Edit:Decir que el comando findstr me dice "La linea xxxxx es demasiado larga" supongo que alguna limitación tendrá... o que al ser un bin no lo soporta, ni idea.
Gracias
En que lenguaje? ::)
Cita de: Darioxhcx en 27 Septiembre 2009, 20:44 PM
Cita de: xassiz en 27 Septiembre 2009, 20:33 PM
En que lenguaje? ::)
en asm 16 bits lo kiere
Ah okk! Que pena que no se asm.. pero que lo muevan de Scripting porque aqui puede ser Batch, VBScript, Perl, Python, etc..
Cita de: Darioxhcx en 27 Septiembre 2009, 20:44 PM
Cita de: xassiz en 27 Septiembre 2009, 20:33 PM
En que lenguaje? ::)
en asm 16 bits lo kiere
xD
Mmmmm... en que haga lo que necesito me es indiferente. Mejor si es un script/bat porque de esa manera yo ya podré seguir con otros pasos que necesito hacer.
Muchas gracias por el interés
Pudes hacerlo con python:
os.path.getsize
para obtener el tamaño del archivo y de ahi restar los bytes que quieres sacar, hacer un read(n bytes)
desde el inicio del archivo hasta el resultado de la resta y escribirlo en otro archivo que seria el nuevo bin y renombrar al original como backup.
En VB6 es igual de sencillo con:
Open archivo For Binary As #numero
Get
Put
LOF(numero)
'datos como Byte, Long y demas
y haces el mismo procedimiento o puedes utilizar otro lenguaje mas rapido como c o en caso de c++ podrias utilizar:
ios::binary, ios::out, ios::in
Supongo que en Vb Script tb pueda hacerse, pero voz eliges.
Gracias por las respuestas.
Yo no tengo ni idea de programar nada... solo alguna noción básica.
Podría alguien terminarmelo pleaseee :rolleyes:
Aps otra cosa... igual estaba confundido con lo de la extensión de la archivo. Es bin pero no se como van los datos en el...
Gracias
Edit:Los valores del archivo están en hex... eso supongo que influye en algo sorry
Te puedo dar un poco de ayuda de pasada en python:
import os
def cortar(nomOriginal, nomNuevo, tamArchivo, tamCortar):
with open(nomOriginal, 'r+b') as file1:
f1 = file1.read (tamArchivo-tamCortar)
file1.close()
with open(nomNuevo, 'w+b') as file2:
file2.write(f1)
file2.close()
print("Cortado Hecho y guardado en: " + nomNuevo)
direc = input('Ingrese Directorio: ')
dirList = os.listdir(direc)
for fname in dirList:
if(fname.upper().endswith('.JPG')):
if(os.path.isfile(direc + fname)== True):
if(os.path.exists(direc + fname + '.bak')== False):
print ('Nombre de archivo: '+ fname)
leno = os.path.getsize(direc + fname)
print ("inciando cortado en: " + direc + fname)
os.rename(direc + fname,direc + fname + '.bak')
cortar(direc + fname + '.bak', direc + fname, leno, 1000)
else:
print ('Archivo: ' + direc + fname + ' ya fue cortado')
El code es solo un inicio faltan muchas cosas, pero sirve para lo que buscas al iniciar pide el directorio donde buscara los archivos con la extension especificada, en el ejemplo puse *.jpg para que se pueda ver el cambio que realiza, en:
cortar(direc + fname + '.bak', direc + fname, leno, 1000)
el numero 1000 representa cuantos bytes del final de archivo quitara y escribira en un nuevo archivo con el nombre original, antes verifica si se trata de un archivo y si existe o no un archivo *.bak con su nombre, de ser asi no lo procesa porque lo toma como un archivo ya "cortado". Pruebalo en unas imagenes JPG que tengan un tamaño superior al numero que especifiques en "cortar" y veras los cambios al ejecutarlo, luego puedes utilizarlo para los *.bin que mencionas, tb seria que leas acerca de python un buen manual y asi completas lo que falta, las excepciones, depuracion de errores y demas, ademas de crear un buscador de archivos para que no tengas que especificar la ruta, eso lo haces con pocas lineas.
Necesitas python 3 para correrlo.
Muchiiiisimas graaacias!!!!!!
Otra petición... ¿Hay alguna manera para que directamente busque el archivo en el directorio donde ejecuto el archivo?
Gracias!
Edit:O asignar uno que siempre sea el mismo...
Supongo que sería cambiando
direc = input('Ingrese Directorio: ')
por
direc = os.chdir(path)
pero claro... estoy en las m¡smas ... hay que definir el "path" ...
Asi podria ser:
import os
def cortar(nomOriginal, nomNuevo, tamArchivo, tamCortar):
with open(nomOriginal, 'r+b') as file1:
f1 = file1.read (tamArchivo-tamCortar)
file1.close()
with open(nomNuevo, 'w+b') as file2:
file2.write(f1)
file2.close()
print("Cortado Hecho y guardado en: " + nomNuevo)
direc = os.getcwd()
dirList = os.listdir(direc)
for fname in dirList:
if(fname.upper().endswith('.JPG')):
if(os.path.isfile(direc + fname)== True):
if(os.path.exists(direc + fname + '.bak')== False):
print ('Nombre de archivo: '+ fname)
leno = os.path.getsize(direc + fname)
print ("inciando cortado en: " + direc + fname)
os.rename(direc + fname,direc + fname + '.bak')
cortar(direc + fname + '.bak', direc + fname, leno, 20000)
else:
print ('Archivo: ' + direc + fname + ' ya fue cortado')
Buenas!!
Hay algo que falla!! no me hace nada!!
Que error te da?
Algo te debe de mostrar :P
Saludos
Hazle click derecho al archivo y edit IDLE para correrlo con F5 y ahi en el idle te saldra los errores o similar.
Buenas.
Me sale:
IDLE 3.0 ==== No Subprocess ====
>>>
>>>
Por lo que entiendo que no encuentra ningún archivo en el directorio donde lo ejecuto.
¿Alguna idea?
Edit:
Para ver realmente si estaba en el directorio que debería, le he metido esto:
for fname in dirList:
print (fname)
Y si... es el directorio que toca... por lo que no entiendo porqué no encuentra el archivo! :(
¿Puedo especificar un nombre de archivo en concreto? (game.bin)
if(fname.upper().endswith('.bin')):
Gracias
if(fname.upper().endswith('.bin')):
seria:
if(fname.upper().endswith('.BIN')):
Por eso se usa "upper()" y evitamos combinaciones entre may... y min...
Me sigue sin responder nada.
import os
def cortar(nomOriginal, nomNuevo, tamArchivo, tamCortar):
with open(nomOriginal, 'r+b') as file1:
f1 = file1.read (tamArchivo-tamCortar)
file1.close()
with open(nomNuevo, 'w+b') as file2:
file2.write(f1)
file2.close()
print("Cortado Hecho y guardado en: " + nomNuevo)
direc = os.getcwd()
dirList = os.listdir(direc)
for fname in dirList:
if(fname.upper().endswith('.BIN')):
if(os.path.isfile(direc + fname)== True):
if(os.path.exists(direc + fname + '.bak')== False):
print ('Nombre de archivo: '+ fname)
leno = os.path.getsize(direc + fname)
print ("inciando cortado en: " + direc + fname)
os.rename(direc + fname,direc + fname + '.bak')
cortar(direc + fname + '.bak', direc + fname, leno, 131072)
else:
print ('Archivo: ' + direc + fname + ' ya fue cortado')
Perdón por mi torpeza :(
Bueno... mas o menos ya se donde está el error. Es algo sobre la ruta del directorio. Creo que le falta "\" en el path del archivo, ya que si toqueteo el programa me responde en algún punto "F:\pruebagame.bin" cuando tendría que ser "F:\prueba\game.bin" Lo que pasa es que yo no se como solucionarlo...
Gracias
Con esto deberia funcionar:
import os
def cortar(nomOriginal, nomNuevo, tamArchivo, tamCortar):
with open(nomOriginal, 'r+b') as file1:
f1 = file1.read (tamArchivo-tamCortar)
file1.close()
with open(nomNuevo, 'w+b') as file2:
file2.write(f1)
file2.close()
print("Cortado Hecho y guardado en: " + nomNuevo)
direc = os.getcwd() + '\\'
dirList = os.listdir(direc)
for fname in dirList:
if(fname.upper().endswith('.BIN')):
if(os.path.isfile(direc + fname)== True):
if(os.path.exists(direc + fname + '.bak')== False):
print ('Nombre de archivo: '+ fname)
leno = os.path.getsize(direc + fname)
print ("inciando cortado en: " + direc + fname)
os.rename(direc + fname,direc + fname + '.bak')
cortar(direc + fname + '.bak', direc + fname, leno, 131072)
else:
print ('Archivo: ' + direc + fname + ' ya fue cortado')
GRRrrAAAaCiassss!!! Ahora si que va de PM!!!
Finalmente podré seguir con mi proyecto!!! ;)
Saludos