Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ovichan

#1
Hola, lo que quiero hacer prácticamente ya está hecho, sólo me falta hacer la tarea algo más inteligente al detectar si un nomobre ya existe para evitar que por ejemplo si quiero cambiar "Luis" por "José Luis" provoque "José José Luis".

La base es tirar de un txt, donde habrá un listado por líneas, en cada cual habrá un par de palabras, indicando la palabra a cambiar y la nueva palabra: Luis-José Luis.

Código:

Código (vb) [Seleccionar]
Option Explicit

Dim fso, fso2, strNombreAnterior, StrNombreNuevo, RutaNombres, RutaArchivo, ListaArchivos, Archivo, strContenidoAnterior, strContenidoNuevo, NombresFila, FilaPartida,objFile,value, word

Set fso=CreateObject("Scripting.FileSystemObject")
Set fso2=CreateObject("Scripting.FileSystemObject")
Const Lectura = 1
Const Escritura = 2


RutaNombres="C:\Users\Isra\Desktop\lista.txt"
RutaArchivo="C:\Users\Isra\Desktop\Prueba.txt"

'Establecemos los objetos
Set ListaArchivos = fso.OpenTextFile(RutaNombres,Lectura)
Set Archivo=fso2.OpenTextFile(RutaArchivo,Lectura)

'Leemos el archivo a modificar
strContenidoNuevo=Archivo.ReadAll

Archivo.close

Set objFile = fso.OpenTextFile(RutaArchivo, Escritura)


'Lee línea por línea para saber los valores a modificar en un archivo de texto
Do Until ListaArchivos.AtEndOfStream
'Lee la línea entera
NombresFila = ListaArchivos.ReadLine

'Partimos la línea asignando cada valor a un array
FilaPartida=split(NombresFila ,"-")

'Asignamos a cada variable su valor del array por línea
strNombreAnterior=Trim(cstr(FilaPartida(0)))
strNombreNuevo=Trim(cstr(FilaPartida(1)))

'Comprobamos valores
'wscript.echo strNombreAnterior
'wscript.echo strNombreNuevo
value = InStr(strContenidoNuevo, strNombreNuevo)
'wscript.echo value
[color=red]if value <> 1 then [/color]
strContenidoNuevo=Replace(strContenidoNuevo, strNombreAnterior, strNombreNuevo,1,-1,0)
[color=red]end if [/color]
Loop

'wscript.echo strContenidoNuevo
ListaArchivos.close

objFile.WriteLine strContenidoNuevo
objFile.Close


El problema con value = InStr(strContenidoNuevo, strNombreNuevo) es que al detecta que existe ya no interpreta ninguna otra más con el nombre StrNombreNuevo. Si quito la parte en rojo, cada vez que ejecute los nombres compuesto iran ganando el primer nombre reitativamente.

Pensé en hacer un bucle tal que:
Código (vb) [Seleccionar]

for each word in split(strContenidoNuevo, "")
value = InStr(strContenidoNuevo, strNombreNuevo)
'wscript.echo value
[color=red]if value <> 1 then [/color]
strContenidoNuevo=Replace(strContenidoNuevo, strNombreAnterior, strNombreNuevo,1,-1,0)
[color=red]end if [/color]
next


Sin embargo, el resultado no es el esperado. Imagino que será una trivialidad pero ahora mismo estoy ofuscado ^^'. Gracias.
#2
Gracias, voy a testearlo. Quizás es mejor q lo haga en python o vbs, tal y como dices. Ta luego.
#3
Hola estoy implementando este script,para que una vez que compruebe que el archivo de destino no existe borre el que este en el destino y tenga similar nombre. Me explico, mi intencion por ejemplo es copiar un archivo llamado:

[EvoShare] Dragon Ball Z 001 - Aparece un mini Gokuh! Soy Gohan [DVD+DVD] [DUAL+SUBS] by overdrive [DB80E46B].mkv

Y este archivo ira a una carpeta "I:\Dragon Ball GT\". Si alli encuentra un archivo similar en nombre pero con distinto numero de CRC, quiero que elimine el archivo de destino y a continuacion copie el que tengo.

Bueno por ahora tengo esto que funciona, pero me quedo en un punto donde no hay retorno ^^:

Código (dos) [Seleccionar]
:: Hacer lista en la unidad destino
if exist "E:\Dragon Box GT\I\lista.txt" erase "E:\Dragon Box GT\I\lista.txt"

For %%@ in ("E:\Dragon Box GT\I\*.mkv") do (
echo %%~n@>>"E:\Dragon Box GT\I\lista.txt"
)

:: Otra fase
for %%@ in (*.mkv) do (
if not exist "I:\Dragon Ball GT\%%@" (
cd "E:\Dragon Box GT\I\"

for /f "tokens=1,2 delims=][" %%i in (lista.txt) do (

set destino=%%j

for /f "tokens=1,2 delims=][" %%a in ("%%@") do (
set original=%%b
call echo %%original%%
call echo %%destino%%
if %original%=%destino% erase ....
)

)

rem copy "%%@" "I:\Dragon Ball GT" /Y 1>nul 2>&1 && Echo El archivo: "%%@" fue copiado correctamente. || Echo Hubo un fallo al copiar el archivo "%%@".
)
)


Como se puede ver he comprobado la parte del filename que considero clave, vamos el titulo, ya que anteriormente con el primer If se ha realizado un discriminante, y se sabe que el archivo a copiar es diferente. Sin embargo en el IF del tercer FOR ya no paso, no se como puedo hacer para que borrase el archivo que este en "I:\Dragon Ball GT\[EvoShare] Dragon Ball Z 001 - Aparece un mini Gokuh! Soy Gohan [DVD+DVD] [DUAL+SUBS] by overdrive [0001100].mkv"

¿Alguna sugerencia? Quizas esta un poco lioso pero no sabria como abarcarlo de otra manera.
#4
Gracias, ya imaginaba yo q lo habría hecho mal jeje.
#5
Hola a todos, he creado un bat para copiar una serie de archivos en un disco externo y mi intencion es que me saque en pantalla los archivos que se han copiado y si ha habido fallos o no. El script es el siguiente, sin embargo, no se si realmente cumple el objetivo del script o conceptualmente me he equivocado.

Código (bash) [Seleccionar]
@echo off
Title Copiar

if not exist "I:\Carpeta" md "I:\Carpeta"

for %%@ in (*.mkv) do (

copy "%%@" "I:\Carpeta" /Y 1>nul & Echo El archivo: "%%@" fue copiado correctamente. || Echo Hubo un fallo al copiar el archivo "%%@".
        echo.

)

pause>nul&exit


He pensado que si está mal, quizás con %ERRORLEVEL% podría sería mejor pero ya implementarlo a esa linea se me escapa. Gracias.
#6
Bueno estoy diseñando una UI para un programa... todo es relativamente precario pues estoy aprendiendo poco a poco como manejarlo. He conseguido insertar un scrollbar dentro del listbox, sin embargo el problema radica en que el scrollbar no desaparece nunca, ni cuando no hay elementos en el listbox. Estoy probando usando Grid, imagino que con pack se puede hacer de otra manera, lo digo pq por ahora me interesa hacerlo con este comando.

El codigo:

Código (python) [Seleccionar]
import os, sys
import win32api
import platform
import gettext
import locale
import sys
from time import sleep

#GUI para EACUI
try:
    import tkinter
    from tkinter import *
except ImportError:
    raise ImportError("Se requiere el modulo Tkinter")

#Configure gettext Define the '_()' function

APP_NAME = "EACUI"
LOCALE_DIR = ('C:\Locale\es\LC_MESSAGES')

gettextt = gettext.translation(APP_NAME, LOCALE_DIR,fallback=True)
_ = gettextt.gettext

#Ventana
root = tkinter.Tk(screenName=None, baseName=None, className='Tk', useTk=1)

'''Titulos'''
root.wm_title("Eac3to GUI v0.0")
#root.title("Eac3to GUI v0.0")
root.wm_frame()

'''Etiqueta'''
#etiqueta=tkinter.Label(root,text="Eac3to GUI v0.0")
#etiqueta.grid(row=1, column=1)


'''Dimension ventana'''
root.wm_maxsize(1000, 1000)
root.wm_minsize(640,640)
root.wm_geometry('640x640')
root.wm_iconbitmap('.\icon.ico')


'''Menus'''
#File
menu = tkinter.Menu(root)
root.config(menu=menu)
menu1_1 = tkinter.Menu(menu, tearoff=0)
menu.add_cascade(label=_("File"), menu=menu1_1)
menu1_1.add_command(label=_("Open"))
menu1_1.add_command(label=_("Close"))
#Options
menu1_2 = tkinter.Menu(menu, tearoff=0)
menu.add_cascade(label=_("Options"), menu=menu1_2)
menu1_2.add_command(label=_("Setup"),command=lambda: setup(_("Setup")))
menu1_2.add_separator()
menu1_2_1 = tkinter.Menu(menu1_2, tearoff=0)
menu1_2.add_cascade(label=_("Language"), menu=menu1_2_1)
menu1_2_1.add_command(label=_("English"),command=lambda: language(_("English")))
menu1_2_1.add_command(label=_("Spanish"),command=lambda: language(_("Spanish")))
#Help
menu1_3 = tkinter.Menu(menu1_2, tearoff=0)
menu.add_cascade(label=_("Help"), menu=menu1_3)
menu1_3.add_command(label=_("About"),command=lambda: about(_("About")))

'''Ventana de carga con scrollbar interno usando Grid'''
text = tkinter.Listbox(root)
text.grid(padx=10,pady=10)
text.bindtags((text, root, "all"))
#for i in range(20):
    #text.insert(i,i)
scrl = Scrollbar(root, command=text.yview)
text.config(yscrollcommand=scrl.set)
scrl.grid_rowconfigure(10)
#scrl.grid(ipadx=200,ipady=20,sticky='e',rowspan=5)
scrl.grid(in_=text,ipadx=200,ipady=20,sticky='ns')

'''Ventana de carga'''
#windows_load=tkinter.Text(root,height = 1, width=int(root.winfo_width())-580,font=("Times", 12),state=tkinter.NORMAL, cursor='arrow',insertwidth=2,exportselection=1)

#windows_load=tkinter.Listbox(root,height=10,width=int(root.winfo_width())-580)
#windows_load.bindtags((windows_load, root, "all"))
#for i in range(20):
    #windows_load.insert(i,i)

#windows_load.pack(anchor='nw',side=TOP, fill=Y, expand=FALSE,padx=10,pady=10)


'''Ejecucion'''
root.mainloop()


¿En donde estoy metiendo la pata?
#7
Scripting / Re: [Python] Listar Archivos Carpeta
20 Agosto 2013, 05:45 AM
Era por probar cosas nuevas ^^, pero imagino que sera mejor como comentas.
#8
Scripting / [Python] Aplicacion multilenguaje
15 Agosto 2013, 04:34 AM
Hola a todos, pues nada estoy intentando hacer una aplicacion GUI para un programa de codificacion de audio. El caso es que me ha llamado siempre la atención, desde que llevo varios años traduciendo el programa mkvmerge, el poder usar GNU. Estoy poco a poco intentando hacer pruebas para poder traducir la interfaz y por ahora dar las opciones de dos lenguajes, English y Español.

El codigo que llevo es este:

Código (python) [Seleccionar]
#-------------------------------------------------------------------------------
# Name:        EACUI
# Purpose:     Audio encoding with EAC3TO
#
# Author:      Overdrive80
#
# Created:     13/08/2013
# Copyright:   (c) Overdrive80 2013
# Licence:     <your licence>
#-------------------------------------------------------------------------------
import os, sys
import win32api
import platform
import gettext
import locale
import sys

#Configure gettext Define the '_()' function
def set_gettext():
   APP_NAME = "EACUI"
   LOCALE_DIR = ('C:\Locale\es\LC_MESSAGES')

   t = gettext.translation(APP_NAME, LOCALE_DIR,fallback=True)
   _ = t.gettext

def main():
   #Inicializacion de Gettext
   set_gettext()

   '''Create a list of asociated programs'''
   lista_programas=['eac3to']
   '''Check arquitecture'''
   def is_x64():
       arquitectura=platform.architecture()
       if arquitectura[0] == '64bit':
           #print "Tu sistema es de 64 bits."
           return True
       else:
           #print "Tu sistema es de 32 bits."
           return True
   '''Seek path by default of installating'''
   def find(ruta, program):
       for root,dirs,files in os.walk(ruta):
           for name in files:
               if program+'.exe'==name:
                   path=os.path.join(root, name)
                   return path

   PATH_DEFAULT='C:\\'
   for programa in lista_programas:
       path=find(PATH_DEFAULT, programa)
       if path != None:
           ruta_bus=os.path.split(path)
           print (_('File found %s, in the path %s.')) % programa, ruta_bus[0]
           print (_('Would you like to set this path as access by default to program %s?')) % programa
       else:
           print (_("Not file found %s.")) % programa
           print (_('Would you like set handle program´s path?'))

main()



El archivo "es.mo" es este: https://dl.dropboxusercontent.com/u/19135067/es.mo

El problema radica cuando intento ejecutar el script de manera que coja el "es.mo", me da este error:



Es algo curioso pq he podido generar correctacmente el archivo "es.pot" con:

Código (dos) [Seleccionar]
@echo off
Title .Py to .Pot files
set path=path;C:\Python33\
set /p label="Inserte la etiqueta del idioma (p.e.: es): "
python "C:\Python33\tools\i18n\pygettext.py" -d %label% -o %label%.pot %1
pause&exit


Estoy usando la version 3.2 de python pq la 2, al parecer no tiene implementando gettext.

Espero que me podais echar un cable. Saludos.

EDITO: He conseguido fijar ese problema declarando debajo de la importacion de modulos: "_ =None". Sin embargo, ahora me encuentro este problema:



Hubiera escrito el codigo de otra manera pero me daba fallo al generar el archivo pot, porque gettext no admite expresiones debe ser un formato string.

EDITO2: Solucionado, al menos se ejecuta. Al parecer, todo el fallo ha sido por meter en una funcion el codigo de gettext, cuando debe ir fuera del bloque main. Lo que está tachado y que hice no sirve.
#9
Scripting / [Python] Listar Archivos Carpeta
11 Agosto 2013, 22:46 PM
Bueno... hace poco y a modo de hobby me puse a aprender este lenguaje, y aunque soy un mega noob en esto me permito postear un código para quien quiera criticarlo positiva o negativamente... asi podré seguir mejorando.

Este codigo permite listar los archivos de una carpeta que este en la misma ruta que el script, y lo guarda en un txt. He añadido y no he quitado, un parametro simple de control de ejecucion, a modo de depuracion... aunque podia haber hecho algun try... pero me gustan las ventanitas jiji

Código (python) [Seleccionar]
#-------------------------------------------------------------------------------
# Name:        Overdrive
# Purpose:     Listar archivos directorio en un txt
#
# Author:      Overdrive
#
# Created:     10/08/2013
# Copyright:   (c) Overdrive 2013
# Licence:     Free
#-------------------------------------------------------------------------------
#import fnmatch
import os
from tkinter import messagebox
import tkinter

#Creamos una clase para la ventana de control depuración
class Msgbox(object):

   #""" Constructor """
   def __init__(self, text):
       self.text=text
       window = tkinter.Tk()
       window.wm_withdraw()

   def msg(self):
       messagebox.showinfo("Ventana de depuración", self.text)

def escribir(name):

   #Creamos el objeto del archivo de texto
   fd = os.open( name, os.O_RDWR|os.O_CREAT )
   mi_archivo=os.fdopen(fd,"r+")

   #Grabamos cada archivo del directorio en el txt, exceptuando el script
   for file in os.listdir('.'):
       if file[-2:] != 'py' and file[-3:] != 'txt':
           mi_archivo.write(str(file)+"\n")

   #Cerramos el archivo creado
   mi_archivo.close()

def main():
   #Comprobamos si existe .txt y sino lo creamos

   if os.path.isfile(str(os.curdir)+"\lista.txt")==False:
       ventana=Msgbox("No existe el fichero.")
       ventana.msg()
       escribir("lista.txt")
   else:
       ventana=Msgbox("Si existe el fichero.")
       ventana.msg()
       os.remove('lista.txt')
       escribir("lista.txt")

main()
#10
Yo acabo de terminar un curso de aprendizaje gratuito en codeacademy, podeis probarlo, os dara una base de codigo bastante buena... aunque para mi gusto no enseño nada sobre el diseño o creacion de GUIs. Asi que me tendre que leer mas tutos.


Por cierto, yo tengo este libro de la UJaumeI https://dl.dropboxusercontent.com/u/19135067/ippython.pdf, que tiene la mitad de paginas... y no se si será mas o menos actual al que has puesto que es del 2003.