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

#4141
@Lekim
Se que esto te va a gustar tan poco como cuando te aconsejé que era absurdo e ineficiente utilizar los wrappers de Vb6 en Vb.Net (el código fuente habla por si solo), y se que no te gustan mis "tochos", no me cojas más manía... ;) pero ahí va:

Cita de: Lekim en 19 Diciembre 2015, 19:12 PMUtilizando el sistema de las expresiones regulares con Regex ocurre que sólo obtiene los valores siempre y cuando estén el orden establecido en el pattern:s

En .Net, RegEx se debería utilizar solamente cómo último recurso, cuando no nos quedan ideas para llevar a cabo esa tarea, o para escribir algoritmos con más rapidez cuando nos es indiferente el rendimiento y solo queremos acabar de escribir el algoritmo, pero lo cierto es que siempre habrá otro recurso más óptimo que reemplace a RegEx si estamos desarrollando en .Net. A pesar de lo que he dicho, el motor RegEx de .Net es sofisticadísimo, ahora no recuerdo en que principios/fórmulas se basa (soy un inepto en matemáticas de todas formas), pero en ciertas circunstancias puede superar en velocidad a un simple String.Split.

Dicho esto, algo muy importante a tener en cuenta es que los motores RegEx no se idearon ni diseñaron para parsear Html o lenguajes de markups en general; es un completo overkill hacer eso, con respecto al rendimiento y estabilidad de tu algoritmo en general.

De todas formas, si, puedes hacerlo.

Si desconoces el orden de los factores entonces no debes utilizar índices de grupos, debes construir los grupos tu mismo.

Fíjate que el indexer de la class GroupCollection tiene un overload que acepta un nombre de grupo:



...Eso debería llevarte a la siguiente conclusión: se pueden agrupar las capturas por nombres de grupo.

Para ello, esta es la sintaxis adecuada:
(?<NombreDeGrupo>|Expresión de búsqueda)

donde (? es la apertura de grupo.

Aquí tienes la solución, pero he eliminado el atributo height para que hagas tu el resto del trabajo :P:

Código (vbnet) [Seleccionar]
Dim value1 As String = "<img width=""128"" src=""...""/>"
Dim value2 As String = "<img src=""..."" width=""256""/>"

Dim rgx As New Regex("img\s+(src\=.+width\=\""(?<width>|(\d+))\""|width\=\""(?<width>|(\d+))\"".+src\=.+)")

Console.WriteLine(rgx.Match(value1).Groups("width").Value)
Console.WriteLine(rgx.Match(value2).Groups("width").Value)


Aquí tienes otro código de ejemplo:

EDITO: Y aquí más info sobre el tema (pero cuidado, la sintaxis RegEx es para perl):




Cita de: Lekim en 19 Diciembre 2015, 19:12 PM¿Como puedo obtener los valores independientemente del orden en que se encuentren?

Como te indiqué arriba es la manera de hacerlo mediante expresiones regulares, pero como también dije al principio, no se debe hacer,
la razón es simple, aparte de que no es apto, no es lo recomendable por Microsoft, y RegEx es un mecanismo (muy) lento;
aparte de todo eso también es completamente innecesario, ya que la maravillosa IDE de Microsoft tiene un interprete/parser en tiempo de diseño para lenguajes de markups, es practicamente lo mismo para Html y Xml.

Una manera sería tan sencilla como obtener el string del documento que quieres parsear, convertirlo a otro formato más amistoso para la tarea (HtmlDocument o XDocument), obtener el elemento (mediante LINQ, o una expresión XPath, o el intérprete en tiempo de diseño), y leer el atributo del elemento.

Pseudo-ejemplo:
Código (vbnet) [Seleccionar]
Dim html As XDocument = XDocument.Load("source-code")
Dim value As String = html.<body>.<element>.@attribute


Otro ejemplo:
Código (vbnet) [Seleccionar]
Dim el As XElement =
   <img src="..."
       height="128"
       width="128"
       alt="..."
   />

Dim width As Integer = CInt(el.@width)
Dim height As Integer = CInt(el.@height)


PD: Además, siempre puedes optar por utilizar los métodos de esas classes si lo prefieres en lugar de parsear el documento en tiempo de diseño.

Saludos
#4142
Cita de: Senior++ en 19 Diciembre 2015, 20:29 PM
YO LO QUIERO

Nota: No se si me porte bien este año  :-\

Conmigo al menos si te portaste bien ;), te mereces el "premio". Ahí lo llevas, te envié un MP con los datos.

Lo siento por los que respondieron o llegaron tarde, por desgracia no tengo regalos de compensación xD. La próxima vez.

Saludos!
#4143
Cita de: RevolucionVegana en 19 Diciembre 2015, 20:28 PMHola aunque yo no puedo por temas de edad en el foro y mensajes me gustaría saber de que trata ese tal uploaded me suena de algo de las películas que suben por internet para compartir

Uploaded.net es un servicio de hospedaje de archivos, tal vez sea el servicio más utilizado de este tipo, o la competencia, Rapidgator.net.

Los uploaders lo suelen utilizar para subir música y películas cómo bien has indicado, y, si no tienes una cuenta premium en uploaded (o el hosting que el uploader haya utilizado) entonces la descarga te irá muuuuuuuuy lenta, ya que obviamente la velocidad de descarga se restringe para usuarios normales... en todo este tipo de servicios.

Espero haberte aclarado la duda.

Saludos
#4144
... ¿si? xD

EDITO: Todo aclarado :P.

El regalo sigue en pie para quien lo quiera.

Saludos!
#4145
Un año más vengo a hacerles esta pequeña, pequeñisima contribuición en forma de regalo navideño simplemente por ser miembros de este magnifico foro...

Vengo a regalar un cupón para acceder gratuitamente al servicio uploaded.net Premium durante 48 horas.

Para no generar ningún tipo de favoritismo u ofensa o cualquier otro conflicto similar por mi parte, se lo regalaré al primero que responda en este hilo incluyendo en su mensaje esta frase: "YO LO QUIERO".
( si lo pide con otras palabras entonces ignoraré la petición. )

Requisitos:
- Tener al menos un año de antiguedad en el foro.
- Tener más de 100 mensajes publicados (los mensajes del foro libre no cuentan).
- No pertenecer al Staff de elhacker.net (lo siento chicos, es un regalo para los usuarios :P)

Saludos!
#4146
.Net nos ofrece varias alternativas para guardar la configuración de usuario, cómo la serialización de datos, la infrastructura My.Settings, o recurrir al registro de windows, sin embargo, y al menos para mi, un archivo de inicialización (archivo.INI) sigue siendo la mejor forma para portabilizar la configuración de un software, ya que el formato es muy amistoso de cara al end-user (¿quien no sabe editar un INI?), es perfecto para desarrollar software portable y mantener la misma configuración de usuario al copiarlo de un PC a otro, así que he ideado este algoritmo en conjunción para la manipulación de archivos INI usando código administrado (un parser de cosecha propia, sin recurrir a código no administrado con las funciones de la API de Windows que leen archivos INI).

El resultado de todo esto es bastante código, un Type para representar una sección INI, otro Type para representar una llave de una sección INI, etc, pero solo es necesario copiar y pegar todo el código que he desarrollado, ya que su utilización es tan simple como lo que voy a mostrar a continuación...

Ejemplo de uso para crear un INI con una sección y un valor booleano:
Código (vbnet) [Seleccionar]
Dim ini As New IniManager("C:\File.ini", Encoding.Default)

With ini

   .Clear()

   .Sections.Add("SectionName")
   .Sections("SectionName").Keys.Add("KeyName", value:="", comment:="Commentary")
   .Sections("SectionName").Keys("KeyName").Value = "True"

   .Save()

End With

Console.WriteLine(ini.ToString)




Para obtener el valor, lo hariamos así:
Código (vbnet) [Seleccionar]
Dim setting As Boolean = CBool(ini.Sections("SectionName").Keys("KeyName").Value)

Tiene métodos de búsqueda de secciones y llaves, y demás.




IniSection, representa una sección INI:
http://pastebin.com/8mJUZ2Nb

IniKey, representa una llave INI:
http://pastebin.com/eE1ZSnFG

IniSectionCollection, representa una colección de secciones INI:
http://pastebin.com/jcFJ0yYd

IniKeyCollection, representa una colección de llaves INI:
http://pastebin.com/CLfBtB1h

IniManager, lo más importante, la class que administra de manera abstracta los Types mencionados para la manipulación de un archivo INI:
http://pastebin.com/xgy93Saq

Espero que a alguien más le sirva.

Saludos!
#4148
Antes de nada, ¿a quien se le ocurre formular una pregunta de programación sin especificar el lenguaje?, es algo que no soporto :¬¬, jeje.




Asumiré que por "coste" te estás intentando referir a la complejidad ciclomática (y no al intervalo de tiempo de ejecución que toma el algoritmo en cuestión para acabar):

Si, existen formulas para calcular la complejidad de unidades de código o Code units,
además, dependiendo del lenguaje que sea también podrás encontrar ciertas herramientas de escritorio e incluso desde la propia IDE que utilices.

Por ejemplo en la plataforma .Net (VB, C#, etc), en la IDE Visual Studio es tan sencillo como utilizar la opción "Calculate Code Metrics", esto generará un sofisticado informe completo sobre la complejidad ciclomática de la aplicación, y de todos sus miembros (métodos, funciones, classes, etc), así como otros factores como la cantidad de lineas de código, etc:



Una alternativa para .Net sería utilizar la herramienta de refactorización Telerik JustCode que se integra en Visual Studio y mide la complejidad de cada método en tiempo de diseño.

En otros lenguajes desconozco que herramientas habrá, pero realizando una búsqueda en google veo que para la IDE Eclipse, la cual soporta varios lenguajes, hay un plugin llamado "Metrics":

Te dejo algo de información sobre la fórmula, por si no encuentras herramientas automatizadas:

Saludos
#4149
Foro Libre / Re: Agresion a Rajoy.
17 Diciembre 2015, 16:37 PM
por internet se dice que lo de Rajoy ha sido todo un montaje para intentar ganar votos... que el chaval es solo una marioneta.

Saludos
#4150
Foro Libre / Re: Agresion a Rajoy.
17 Diciembre 2015, 15:00 PM
Cita de: JSParrow en 17 Diciembre 2015, 14:15 PMEl uso de la violencia contra ese señor tan mayor lo unico q hace es darles argumentos para recrudecer la legislación tipo "ley mordaza". Flaco favor ha hecho ese Chavalillo con las ideas aun verdes a los q no estamos deacuerdo con la legislacion actual del pais por exceso de represión. !MUY BIEN CHAVAL POR TUS CINCO MINUTOS DE FAMA NOS PUEDEN CAER AÑOS DE REPRESION!!

Hay batallas que no se pueden ganar con palabras, y las leyes que quieran meternos las meteran por una excusa o por otra, por favor, pero si hasta le han puesto precio a la luz solar, solo es cuestión de tiempo que implementen lo que les salga de las pelotas hasta que encuentren un agujero de escape viable con el que poder hacerlo sin demasiadas críticas, y ale, p'alante, ya sea por el "error" que comete un tio que pega una hostia, o el error de cualquier otro ciudadano.

No culpes al chaval que dió el hostión, porque aquí los malos no somos nosotros (el pueblo), A VER SI TENEMOS PRESENTE EN QUE BANDO ESTAMOS TODOS LOS ESPAÑOLES.

Yo creo que es mejor eso, darle una hostia fina (que bien merecida se la tenía), que quedarse sin hacer nada viendo las cosas pasar,
y por "nada" también incluyo quejarse de que otros hayan intentado hacer algo a su manera (como de lo que ha hecho el chaval este de la noticia),
aunque para algunos una supuesta mejor solución sería acudir a una manifestación pacífica, o recoger firmas ( ...ja! ).

Saludos