|
Mostrar Mensajes
|
Páginas: 1 [2] 3 4 5 6 7 8 9
|
12
|
Programación / Scripting / Re: QPF to Chapter file
|
en: 13 Julio 2013, 06:17 am
|
Bueno, pues nada muchas gracias Elecktro, ya lo he terminado. El código es totalmente funcional, unicamente me gustaria saber un detallito. ¿Es posible hacer como en BAT, que del directorio actual del archivo vbs, tome los en cuenta el archivos *.qpf? Es para automatizar un poco más, y no tener que estar cambiando cada vez por tres la ruta de acceso. Ya sabes algo como: %~dp0*.qpf'Creamos el objeto ActiveX con el que podamos operar con archivos en el sistema. Set objfso = createobject("scripting.filesystemobject") 'Definicion de variables Dim linea Dim token Dim hora Dim min Dim seg Dim ms Dim time Const constante = 0.0417083 'Creamos el objeto del archivo qpf set qpfile=objfso.Opentextfile("C:\Users\Isra\Desktop\Nueva carpeta\10. QPFILE_NAME.qpf",1) 'Para evitar que agrege continuamente codigos de tiempo, por un descuido al ejecutar varias veces. Borramos el archivo, si existe IF (objfso.FileExists("C:\Users\Isra\Desktop\Nueva carpeta\Chapters.txt")) THEN objfso.Deletefile("C:\Users\Isra\Desktop\Nueva carpeta\Chapters.txt") END IF Do until qpfile.AtEndOfStream linea=qpfile.readline() 'Filtrar linea, para quedarnos con el numero del frame For each token in split(linea, " ") Tratar(token) 'msgbox(hora & " hora. " & min & " min. " & seg & " seg. " & ms & " ms. ") exit For next loop Wscript.quit 'Subrutina para transformar numero entero en timestamp Private Sub Tratar(Token) 'Establecemos criterio de comparación calculo=token*constante p_entera= Int(calculo) Select Case true Case p_entera >= 216000 'Mensaje de error msgbox("Error. Un video no puede tener una duración continua igual a uno o más días.") Case p_entera >= 3600 'Calculo de timecodes partiendo de horas calculo=calculo/3600 hora=Int(calculo) min=Int((calculo-hora)*60) seg=Int((((calculo-hora)*60)-min)*60) ms=Cint((((((calculo-hora)*60)-min)*60)-seg)*1000) msgbox(hora & " hora. " & min & " min. " & seg & " seg. " & ms & " ms. ") Case p_entera < 3600 AND p_entera >= 60 'Calculo de timecodes partiendo de minutos calculo=calculo/60 'Establecemos para este caso, hora=0 hora=0 min=Int(calculo) seg=Int((calculo-min)*60) ms=CInt((((calculo-min)*60)-seg)*1000) 'msgbox(hora & " hora. " & min & " min. " & seg & " seg. " & ms & " ms. ") Call Formatear(hora, min, seg, ms) Case p_entera < 60 AND p_entera >= 0 'Calculo de timecodes partiendo de segundos 'Establecemos para este caso, hora=0 hora=0 min=0 seg=Int(calculo) ms=CInt((((calculo)-seg))*1000) msgbox(hora & " hora. " & min & " min. " & seg & " seg. " & ms & " ms. ") Case ELSE msgbox("Error. No pueden existir valores negativos.") END SELECT End Sub Private Sub Formatear(hora, min, seg, ms) 'Damos formato al codigo de tiempo para que añada un cero si es necesario SELECT CASE TRUE CASE hora<10 AND ms<100 'Añadimos un cero delante para dar formato a la hora y los milisegundos. timestamp="0"&Timeserial(hora,min,seg)&".0"&ms Call Escribir(timestamp) CASE hora<10 'Añadimos un cero delante para dar formato a la hora. timestamp="0"&Timeserial(hora,min,seg)&"."&ms Call Escribir(timestamp) CASE ms<100 'Añadimos un cero delante para dar formato los milisegundos. timestamp=Timeserial(hora,min,seg)&".0"&ms Call Escribir(timestamp) CASE ELSE timestamp=Timeserial(hora,min,seg)&"."&ms Call Escribir(timestamp) END SELECT end sub Private Sub Escribir (timestamp) 'Escribimos nuestro archivo de capitulos. Set codigo_tiempo=objfso.opentextfile("C:\Users\Isra\Desktop\Nueva carpeta\Chapters.txt", 8, true) 'creamos el archivo codigo_tiempo.writeline timestamp codigo_tiempo.close end sub
La verdad pensaba que no me iba a salir, pero gracias a ti, aqui tengo mi primer codigo en vbs ^^
|
|
|
13
|
Programación / Scripting / Re: QPF to Chapter file
|
en: 13 Julio 2013, 04:14 am
|
Pues te aseguro que he estado buscando en google de hecho me he bajado varios manuales, eso si, todo orientado a html. Estoy mirando la documentacion aqui http://www.w3schools.com/vbscript/func_round.aspTambien en microsoft y me baje el chw 6.5, pero no se pq narices no me muestra la información, pero vamos que te aseguro que he estado buscando en google. Pero no te preocupes, no preguntaré tanto. Y gracias again EDITO: Lo he testeado y había un fallito por el cual no ejecutaba el código. Lo correcto: Select Case true
Imagino que todo tiene que ver al usar comparadores logicos en los casos del select. Un ratito me ha llevado encontrarlo T_T http://computer-programming-forum.com/59-vbscript/08b7100c477ec503.htm
|
|
|
14
|
Programación / Scripting / Re: QPF to Chapter file
|
en: 13 Julio 2013, 04:05 am
|
Vale, ya lo probaré. Y muchas gracias, pero no me lo tengas en cuenta que estoy ofuscado en esto y se me pira la olla. Perdona si te ha molestado.
|
|
|
15
|
Programación / Scripting / Re: QPF to Chapter file
|
en: 13 Julio 2013, 03:52 am
|
Si, las habia declarado pero aun asi como el algoritmo para calcular los segundos, lo hice mediante el modulo, no se que pasa que no lo muestra en pantalla si hago un msgbox despues de haber llamado a la subrutina: For each token in split(linea, " ") Tratar(token) msgbox(min & " min. " & seg & " seg. " & ms & " ms. ")
De todas maneras, ahora mismo el problema mas grande es que vbs me redondea automaticamente los valores de los resultados inmediatos a su numero entero superior, cosa que en mi caso, no es apropiado. ¿No puedo unicamente quedarme con la parte entera sin que me redondee?
|
|
|
16
|
Programación / Scripting / Re: QPF to Chapter file
|
en: 13 Julio 2013, 03:05 am
|
Si, era el primer caso que me has puesto pero cuando ejecute el bucle que aun no lo he probado pues estoy depurando el algoritmo, ejecutara cada ciclo con dos lineas. 'Creamos el objeto ActiveX con el que podamos operar con archivos en el sistema. Set objfso = createobject("scripting.filesystemobject") 'Definicion de variables Dim linea Dim token Const constante = 0.0417083 'do until qpfile.AtEndOfStream set qpfile=objfso.Opentextfile("C:\Users\Isra\Desktop\Nueva carpeta\10. QPFILE_NAME.qpf",1) qpfile.readline() : linea=qpfile.readline() 'Filtrar linea, para quedarnos con el numero del frame For each token in split(linea, " ") Tratar(token) exit For next 'loop Wscript.quit 'Subrutina para transformar numero entero en timestamp Sub Tratar(Token) 'Establecemos criterio de comparación calculo=token*constante p_entera= Cint(calculo) 'Mensaje de error IF (p_entera >= 216000) THEN hora=normalizar(calculo) msgbox("Error. Un video no puede tener una duracion continua igual a un o mas días.") ELSE 'Calculo de timecodes partiendo de horas IF (p_entera >= 3600) THEN msgbox("hola1") ELSE 'Calculo de timecodes partiendo de minutos IF (p_entera < 3600 AND p_entera >= 60) THEN min=calculo\60 seg=calculo mod 60 ms=round(((((calculo/60)-min)*60)-seg),3)*1000 msgbox(min & " min. " & seg & " seg. " & ms & " ms. ") ELSE 'Calculo de timecodes partiendo de segundos IF (p_entera < 60 AND p_entera >= 0) THEN msgbox("hola3") ELSE msgbox("Error. No pueden existir valores negativos.") END IF END IF END IF END IF End Sub
EDITO: De todas maneras creo que hay un problema, pq al retorna a procedimientos principal no se si guarda correctamente los valores de las variables (hora, min, seg, ms). Y creo que no es un buen diseño depender de tantas variables generales, o al menos eso tenia entendido. ¿Más que un procedimiento, no debería ser una función? EDITO2: Tengo un gran problema con el algoritmo, si fuerzo el valor de tokens=2633, el valor resultante no coincide con el que deberia puesto que automaticamente lo redondea. Me explico. El frame 2633, tiene un timestamp igual a 01:49.818. Con el algoritmo que he puesto y otros que estoy probando, redondea los valores al inmediato superior. En este caso, los segundos los pasa a 50. He probado con seg=FormatNumber((calculo/60-min)*60,0), y tambien lo redondea. Ñooooooo
|
|
|
17
|
Programación / Scripting / Re: QPF to Chapter file
|
en: 13 Julio 2013, 00:25 am
|
Buenas otra vez, como tengo que saltar una linea del archivo de texto al que se invoca, mi pregunta es si puedo usar el otro tipo de FOR, con indice y a su vez, usar la opcion de split. Mi codigo por ahora va asi: 'Creamos el objeto ActiveX con el que podamos operar con archivos en el sistema. Set objfso = createobject("scripting.filesystemobject") 'Definicion de variables dim linea dim numero const constante = 0.0417083 'do until qpfile.AtEndOfStream set qpfile=objfso.Opentextfile("C:\Users\Isra\Desktop\Nueva carpeta\10. QPFILE_NAME.qpf",1) linea=qpfile.readline() 'Filtrar linea, para quedarnos con el numero del frame For each token in split(linea, " ") Tratar(token) exit For next 'loop Wscript.quit Sub Tratar(Token) 'Mensaje de error IF (token >= 216000) THEN msgbox("Error. Un video no puede tener una duracion continua igual a un o mas días.") ELSE 'Calculo de timecodes partiendo de horas IF (token >= 3600) THEN msgbox("hola1") ELSE IF (token < 3600 AND token >= 60) THEN msgbox("hola2") ELSE IF (token < 60 AND token >= 0) THEN msgbox("hola3") ELSE msgbox("Error. No pueden existir valores negativos.") END IF END IF END IF END IF End Sub
|
|
|
18
|
Programación / Scripting / Re: QPF to Chapter file
|
en: 12 Julio 2013, 19:49 pm
|
Por ahora, voy asi... pero por hoy no puedo dedicarle mas tiempo que tengo que sincronizar mas cosas: 'Creamos el objeto ActiveX con el que podamos operar con archivos en el sistema. Set objfso = createobject("scripting.filesystemobject") dim linea dim numero dim constante constante=0,0417083 'do set qpfile=objfso.Opentextfile("C:\Users\Isra\Desktop\Nueva carpeta\10. QPFILE_NAME.qpf",1) linea=qpfile.readline() 'Filtrar linea, para quedarnos con el numero del frame For each token in split(linea, " ") numero=token exit For next msgbox(numero) 'loop until qpfile.AtEndOfStream = true
Ahora debo aplicar el algoritmo de conversion. ¿Se puede hacer como en dos, crear una etiqueta (procedimiento) desde el interior del bucle?? No se algo como: Function Conversion (string x){}
|
|
|
19
|
Programación / Scripting / Re: QPF to Chapter file
|
en: 12 Julio 2013, 19:01 pm
|
Me sabe mal pero te voy a martirizar. Estoy intentando ir por pasitos. Entonces lo que estoy intentando lo primero es abrir el archivo qpf tal que asi: 'Creamos el objeto ActiveX con el que podamos operar con archivos en el sistema. Set objfso = createobject("scripting.filesystemobject") set qpfile=objfso.Opentextfile("C:\Users\Isra\Desktop\Nueva carpeta\10. QPFILE_NAME.qpf",1) msgbox qpfile.readline
Esto funciona, lo muestra en pantalla pero claro lo que quiero que me guarde esa linea en una variable y hacer el filtrado por tokenks como has indicado. Ademas la lectura por lineas creo que deberia usarlo con un for, hasta el final del archivo. Algo quizas como: Do until ARCHIVO FINALICE Procedimiento anterior Loop until
La condicion ARCHIVO FINALICE imagino que respondera a algun metodo del objeto del archivo de texto. ¿Cuál es? Siento ser tan cansino. ¬¬' EDITO: He intentado esto pero algo va malEDITO2: Esta parte resuelta 'Creamos el objeto ActiveX con el que podamos operar con archivos en el sistema. Set objfso = createobject("scripting.filesystemobject") dim linea set qpfile=objfso.Opentextfile("C:\Users\Isra\Desktop\Nueva carpeta\10. QPFILE_NAME.qpf",1) linea=qpfile.readline() msgbox(linea) 'qpfile.copyline(linea)
Hay que ser cafre que estaba intentando meter un string en un objeto. Esto de los objetos siempre me costo entenderlo.... y ya en java con los constructores ni te digo.
|
|
|
|
|
|
|