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 - Eleкtro

#6801
Cita de: novato04 en 26 Julio 2014, 04:38 AM
:-( esque tampoco se python

. . .

en fin, siento sermonearte tanto pero deberías cojer un libro y leer, aquí te ayudaremos en lo que sea posible, pero ser novato no es una razón de peso para pedirlo todo echo en Batch, Ruby, Python, y etc...

Por otro lado, has dado un salto en la dirección correcta al dejar atrás la utilización de Batch,
pero dado el (nulo) nivel de conocimiento del que dispones en Python, te sugiero utilizar las expresiones regulares ya que es algo a lo que puedes recurrir en cualquier otro lenguaje sin necesidad de realizar demasiados cambios entre uno y otro.

Ejemplo:

Código (python) [Seleccionar]
import os, time, re

String     = '<div class="nombre-pelicula"><p>Cadena perpetua</p></div>'
expression = '.*<p>(.*)<\/p>.*' # Paragraph tag
RegExComp  = re.compile(expression, re.IGNORECASE)
RegExMatch = RegExComp.match(String).group(1)

print RegExMatch

time.sleep(5)


Saludos.
#6802
Lo corregí al vuelo (sin testearlo) y me confundí al usar la llamada a Call en la instrucción equivocada, ahora sí:


...
set /a enu+=1
Call Echo Label.SetText^("Label %%enu%%", "%%a"^);
...


PD: No es necesario que me envies un MP cada vez que respondas al hilo, no por ello me voy a enterar más pronto.

Saludos!
#6803
Código (dos) [Seleccionar]
   @echo off
   rem type nombre.txt
   (For /F "Delims=" %%a in ('type "nombre.txt"') Do (
      Call set /a enu+=1
      Echo Label.SetText^("Label %%enu%%", "%%a"^);
   )) >"final.txt"


Otra solución sera activar EnableDelayedExpansion:
· http://ss64.com/nt/delayedexpansion.html

Saludos
#6804
"Hasta infinito" es imposible ya que la capacidad de Batch equivale al valor máximo de un Int16 (32.767).

Solo tienes que setear una variable numérica y sumarle un valor de "1" en la iteración del For... vamos, tan dificil no es...
Código (dos) [Seleccionar]

Set /A "Count=0"
Set /A "Count += 1"
Echo %Count%


¿Porque no lees un manual básico de Batch?.

Saludos
#6805
Cita de: Yidu en 25 Julio 2014, 16:39 PMNo sé si habrá otro métodos. Incluso con el modulo CSV para que no salgan las secuencias de escape.

Según la documentación del móduclo parece que no es posible: https://docs.python.org/2/library/csv.html

Puedes especificar el parámetro "escapechar='\t'" y éste eliminará el tab, pero éste solo tendrá efecto una vez, es decir, si hay más de un \tab no servirá para eliminarlos todos.

Saludos
#6806
vale, me he comprado un ventilador que se conecta a la bios (cha_fan) el problema es que el cable es demasiado corto y no me permite mantener la dirección de flujo de aire que yo quiero, quiero que el ventilador frontal le de aire a los HDD para que el aire circule hasta la parte trasera y se lo lleve el ventilador trasero, pero para eso tengo que poner el ventilador frontal "al revés" y entonces el cable no llega, osea ahora mi ventilador frontal está tirando el aire por la parte frontal... algo es algo, ahora mid hdd's están 10º menos calientes, pero creo que se podría mejorar usando el flujo de aire que yo quiero.

· ¿Existen "alargadores" para cables FAN como el del ventilador?

· ¿Existe algún convertidor "FAN > Cable Fuente de alimentación"? (para conectarlo directamente a la fuente, la cual está mucho más cerca que el conector "ChA_FAN")

PD: He buscado pero no he encontrado nada parecido.

Saludos!
#6807
Cita de: Eleкtro en 25 Julio 2014, 04:45 AM2. Al redactar un post con código, debes etiquetar el código utilizando su respectiva etiqueta GeShi.

Porfavor, respeta las normas.

En el For estás partiendo la cadena para tomar 1 solo Token, debes tomarlos todos, y tampoco debes usar delimitadores.
(si corriges tu post te mostraré un ejemplo :P)




EDITO:

Cita de: novato04 en 25 Julio 2014, 22:39 PMPodrias mandarme el ejemplo  ;D

Código (dos) [Seleccionar]
(For /F "Delims=" %%a in ('type "nombre-pelis.txt"') Do (
   Echo Label.SetEnabled^("%%a", True^);
))>"final.txt"


PD: Sigo insistiendo en que no deberías usar Batch si dispones de un lenguaje de verdad, acostumbrarse a hacerlo por la via más sencilla no siempre es lo mejor :P.

Saludos
#6808

1. ¿Porque usas el icono de "resuelto" cuando tu problema no está resuelto?, la utilización de ese icono está reservada para los temas resueltos.

2. Al redactar un post con código, debes etiquetar el código utilizando su respectiva etiqueta GeShi.

3. ¿Has intentado hacer la tarea por ti mismo?, ¿donde está tu código demostrándolo?.





El formato que le pretendes dar al contenido del texto son instrucciones de otro lenguaje, las cuales me imagino que luego usarás en ese otro lenguaje, ¿entonces porque en lugar de parsear el HTML en ese lenguaje que estés utilizando, prefieres involucionar para usar una herramienta básica e imperfecta como es Batch?, no le encuentro sentido, si tienes dudas respecto a como parsear los atributos/tags de un HTML en ese lenguaje entonces te sugiero que formules una pregunta enfocada a ese lenguaje.

Batch no tiene soporte (por así decirlo) para la edición de HTML, además su capacidad RegEx es muy limitada, hay que recurrir a técnicas como Substring o Split (aunque esta última también es limitada en Batch), de todas formas se puede hacer ...pero no esperes precisión en ciertas circunstancias (Ej: Si la cadena contiene "<" o ">"), sinceramente has elegido el peor lenguaje que podías escojer, tómate lo que te he sugerido a modo de consejo.

Código (dos) [Seleccionar]
@Echo OFF

Set "DIV=<div class="nombre-pelicula"><p>The November Man</p></div>"

For /F "Tokens=4 Delims=<>" %%a in ('Echo "%DIV%"') Do (
Echo Label.SetEnabled^("%%a", True^);
)

Pause&Exit /B 0


Saludos
#6809
Cita de: SARGE553413 en 25 Julio 2014, 00:11 AMPor preciso no me refiero a números altos, si no a muy bajos, a décimas de milisegundo.

Pues eso me parece incluso mucho, pero mucho peor.

¿Porque necesitas tanta precisión?, exigir reiteradamente operaciones en un tiempo menor que 10-100 ms no es nada sano para tu aplicación, cuanto más pequeño y más continuo sea el lapso más acabaría mermando el rendimiento en general tanto de la aplicación como del equipo.

De todas formas, te informo:

Según un articulo de MSDN del que ahora mismo no dispongo la url (fue movido o eliminado), tanto el 'System.Windows.Forms.Timer' como el 'System.Timers.Timer' tienen una precisión media de 10 a 55 ms según la versión de Windows en ejecución (y otros factores a tener en cuenta como el consumo de las otras aplicaciones que estén en segundo plano), y estos no están diseñados para cronometrar de forma precisa, sino para desencadenar eventos en un intervalo específico.

Por lo contrario, un StopWatch es todo lo contrario a un Timer, es como un cronómetro y su función si es la de (intentar) medir el tiempo de forma precisa.

Pero la precisión de un StopWatch depende de varios factores en los que tú no puedes influir, como por ejemplo el hardware instalado (los contadores de rendimiento) y el sistema operativo en ejecución:
· http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.ishighresolution%28v=vs.110%29.aspx

Así como también depende de la frecuencia de los ticks:
·  http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.frequency%28v=vs.110%29.aspx
CitarFor example, a timer frequency of 2 million ticks per second equals a timer resolution of 500 nanoseconds

En mi caso la propiedad "Stopwatch.Frequency" me devuelve un valor estático de "3.919.409", pero escribí un código para testearlo y me suma alrededor de "3.923.329" de ticks por segundo, puedes comprobar cuantos ticks haces tú:
Código (vbnet) [Seleccionar]
       Dim sw As New Stopwatch

       With sw

           .Start()

           While .ElapsedMilliseconds <= 1000
               Debug.WriteLine(.ElapsedTicks)
           End While

           .Stop()

       End With


Además debes asegurarte de utilizar la propiedad Stopwatch.ElapsedTicks para medir microsegundos/nanosegundos, no la propiedad Elapsed.Ticks ya que este devuelve un TimeSpan, y aquí tienes una explicación más detallada de ello:
· http://stackoverflow.com/questions/1562850/precise-time-in-net

Cita de: SARGE553413 en 25 Julio 2014, 00:11 AM¿Lo más apropiado para eso es stopWath?

Sí, es a lo que más puedes aspirar.

También podrías utilizar la API QueryPerformanceCounter y QueryPerformanceFrequency pero aparte de que esto nunca lo he probado (no me surge la necesidad ni tampoco me interesa) se supone que el Stopwatch es un wrapper de esas funciones, así que básicamente debe ser lo mismo, pero aquí tienes un ejemplo:
· http://msdn.microsoft.com/en-us/library/aa964692%28v=vs.85%29.aspx

Saludos.
#6810
Hola

Cita de: SARGE553413 en 24 Julio 2014, 17:36 PM
Tengo un problema con la función Sleep() y es que el argumento que se le pasa solo puede ser un 'int', y yo necesito "programar" una tarea con más precisión en el tiempo.
Por ello he pensado en usar System::Timers::Timer.

¿He entendido mal o estás insinuando que en tu proyecto necesitas detener un thread durante más de 24 Días?, porque ese es el alcanze máximo del Int32, no se que más precisión puedes necesitar en el tiempo... además el valor mínimo de ambos es "1" milisegundo.

Máximo tiempo:
Código (vbnet) [Seleccionar]
Threading.Thread.Sleep(TimeSpan.FromMilliseconds(Integer.MaxValue))

En días son:
Código (vbnet) [Seleccionar]
MessageBox.Show(TimeSpan.FromMilliseconds(Integer.MaxValue).TotalDays)
<>
24,8551348032407

Y en milisegundos son:
Código (vbnet) [Seleccionar]
MessageBox.Show(Integer.MaxValue)
<>
2147483647

En total son +596 horas, lo cual obviamente es más que suficiente para cualquier tipo de necesidad.

No se como intentar ayudarte sin entender mejor el problema que tienes, pero yo deduzco que has enfocado mal la utilización del método y lo que pretendes conseguir con ello.




Cita de: SARGE553413 en 24 Julio 2014, 17:36 PM
Programo el Timer para que haga su tarea cada 10 milisegundos (Timer.interval=10), y lo pongo a trabajar durante 3 segundos. Es decir, tendría que realizar dicha tarea un total de 300 veces pero solo llega a 260.

Un Timer es lo más impreciso que puedes utilizar (me refiero entre las opciones de las que dispones), como alternativa podrías utilizar un StopWatch, el tiempo no se mide de la misma manera entre un Timer-StopWatch, los métodos de uso son distintos y hay que tener en cuenta que ambos hacen una ESTIMACIÓN del tiempo de ejecución, quizás nunca puedan tener una precisión 100% exacta si esperas que un Timer/Stopwatch haga todos los ticks que esperas que haga en un lapso determinado de tiempo,
de todas formas tampoco has mostrado el código para saber si otros factores pueden estar influyendo, pero vamos ...eso no importa mucho mientras sigas utilizando un impreciso Timer.

Saludos!