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 - Lekim

#221
Hola

Código (vbnet) [Seleccionar]
Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim fechaini As DateTime
       Dim fechafin As DateTime


       DateTime.TryParse(TextBox1.Text, fechaini) ' 12:00
       DateTime.TryParse(TextBox2.Text, fechafin) '13:00


       Dim dif As TimeSpan = fechafin - fechaini

       Dim Precio As Integer = 0
       Dim TotalMinutos As Integer = (dif.Hours * 60 + dif.Minutes)
       If TotalMinutos < 60 Or TotalMinutos = 60 Then Precio = 500
       If TotalMinutos > 60 Then Precio = 500 + (CInt((TotalMinutos - 60) / 15)) * 150

       MsgBox(Precio)
   End Sub
End Class



Simplemente he añadido esto a tu código

Código (vbnet) [Seleccionar]
     
...
Dim Precio As Integer = 0
       Dim TotalMinutos As Integer = (dif.Hours * 60 + dif.Minutes)
       If TotalMinutos < 60 Or TotalMinutos = 60 Then Precio = 500
       If TotalMinutos > 60 Then Precio = 500 + (CInt((TotalMinutos - 60) / 15)) * 150
...

Basándome en lo que ha dicho:

por ejemplo un auto llego 12:00 y salio 13:00 = 01:00  estuvo una hora el cobro seria $500

¿si el vehículo estuvo ejemplo llego  12:00 y salio 12:15 = estuvo 15 minutos pero igual se le cobra los $500?


Lo que hago es obtener el total de minutos y establezco la condición de que si el total de minutos es menor o igual de 60 (o sea una hora) pues el Precio sea igual a 500.

Por otro lado también dices que:

entoces cada 15 minutos depues de la hora deberia cobrarse $150

Entonces establezco la condición de que si ha pasado más de una hora es decir más de 60 minutos entonces, resta 60 minutos del total que son los 500 y luego divide el resto por 15 para obtener el número de cuartos de hora.  El resultado lo multiplica por 150, ya que como has dicho cada quince minutos después de la hora se multiplica por 150.  (:-( esto me recuerda a los problemas de mates...). Finalmente suma 500 más el producto del total de cuarto de horas por 150.

Por ejemplo:
De 12:00 a 12:15   --->  es igual a 15 minutos  < 60 min.  ---> Precio = 500
De 12:00 a 13:00   --->  es igual a 60 minutos  = 60 min.  ---> Precio = 500
De 12:00 a 13:10   ----> es igual a 70 minutos > 60 min  ---> Precio = 500 + CInt((70-60)/15)*150 = 500 ... ya que 70-60 = 10 minutos y CInt(10/15) = 0 cuartos de hora.

De 12:00 a 13:30 ---> .... > 60 min.  ----> Precio = 500 + CInt((90-60)/15)*150 = 800 ya que 90-60= 30 minutos y CInt(30/15) = 2 cuartos de hora,  2 * 150= 300
y 500 + 300 = 800

(es una versión muy simplificada de la función CalculateMoney de Elektro  . Pero que conste que la vi después, eh  :laugh:)

Sl2s





#222
HOLA

Pero esto de que va de la bruja o de terroristas XD

Bueno, yo no voy a entrar en conspiraciones gubernamentales porque no se ni papa del tema pero de curanderos, brujas/os, exorcistas, y timadores de lo sobrenatural, si.

Por ejemplo, si yo afirmo que puedo curar a un enfermo de X enfermedad poniendo solamente en su frente mi mano, y hago esto con mucha gente, un porcentaje de estos se curarán, por la razón que sea; que no estuvieran realmente enfermos, porque paralelamente realizaban algún tipo de auténtico tratamiento contra dicha enfermedad o por efecto placebo. Cuanta más gente tratase más probabilidad habría que al imponer mi mano alguien se curara. Obviamente dicha persona por credulidad y sugestión creería que ha sido gracias a mi. Estas personas por voca a voca arrastrarían a otras víctimas hacia mi.

Algo idéntico ocurre con santos, amuletos de la suerte, etc. Cuanta más gente vaya y bese los pies del Santo de los... (lo que sea) pidiendo un deseo más probabilidad hay que alguien que le haya besado se le cumpla el deseo, pero no por besar al santo si no por puro azar y circunstancias que nada tiene que ver.  Hubiera ocurrido de igual modo, si no lo hubieran hecho. De igual modo, si en lugar de besar los pies del santo todos hubieran besado una piedra cualquiera, inevitablemente, al ser un grupo muy numeroso el que ha hecho, a alguien se le hubiera cumplido el deseo. El cual lo atribuirían a la piedra, echo que provoca que aún más gente al ver u oir que otros han cumplido su deseo vayan y hagan lo mismo. Con lo cual la probabilidad de éxito es aún mayor. Es más, si de todas esas personas nadie hubiera besado al Santo (o la piedra) a alguien se le hubiera cumplido el deseo igualmente.  Además, todas las personas alguna tendría una desgracia, que lógicamente no lo atribuirían a haber besado el Santo o la piedra, sino a otra cosa como ver un gato negro, pasar por debajo de una escalera o lo que sea. Ya que lo bueno lo asocian a aquello que creen les trae suerte, mientras que lo malo a aquello que creen les trae mala suerte.

Lo mismo ocurre con algunas Administraciones de Lotería en España. Que cuando toca en X administración, al año siguiente más gente compra en dicha administración, porque piensan que "reparte suerte", en consecuencia, al comprar más gente lotería, más probabilidad hay que nuevamente reparta un premio. Por haber un número mayor de personas de lo normal que poseen un número comprado en dicha administración de lotería.

De igual modo esta señora coloca una piedra en el ordenador de algún cazurro. El cual probablemente tenga un antivirus o no tenga en realidad ningún dichoso virus. El cazurro afirmará que antes que ella colocara la piedra su ordenador tenía un virus y que luego su ordenador se arreglo y ya no tenía virus. Hay que ver también si el 'hechizo' lo realiza a solas con el ordenador o no, ya que dicho tiempo lo podría  aprovechar para arreglarlo. En fin, se me ocurre mil cosas.

Las brujas, curanderos, exorcistas, etc. también deben su popularidad a la propaganda que les hace el cine, la TV  y la literatura, que hace que mucha gente crea en ellos.

En ocasiones esto es así porque contribuye a la creencia en Dios, en el "más allá". Se basa en un condicional, si las brujas existen, tienen poderes, hablan con espíritus y pactan con el diablo entonces.... la religión cristiana es verdadera, Dios existe y hay demonios y más allá...También por afán de lucro, si hago una película  sobre brujas, mejor que SÍ sean brujas y tengan poderes, den miedo o hagan cosas guays,  porque si no, la película es un truño y nadie irá a verla. ¿Te imaginas la película de 'El Exorcista' donde la niña no esté poseída sino que tenga una enfermedad mental desconocida, el cura aparezca como un idiota supersticioso que traumatiza a la niña y los padres como unos malos padres por mandar a su casa a un cura para intentar curar a la niña con una enfermedad que los médicos desconocen? Además que se abriera una ventana por el viento o se cayera un marco por estar mal colocado y creyesen que ha sido un demonio que creen que hay dentro de la niña... No habría morbo, y la película no hubiera recaudado ni la mitad de lo que lo ha hecho. Es más chulo que gire la cabeza, que levite y se meta un crucifijo por el ... en fin.

El truco del horóscopo funciona también con la probabilidad. Si yo afirmo algo muy general que puede ocurrirle a cualquier persona, y lo asigno a 'Capricornio' por ejemplo, de millones de personas que se consideren Capricornio, alguno de ellos se le cumplirá la predicción. Cuanta más gente lo lea, más probabilidad hay que cumplan mi predicción. Es como repartir números de 1 al 5 a diez personas y las oculten en su bolsillo sin que yo vea el número, y a cada una de ellas sin que la otra lo sepa le digo - Tú tienes un 5 - forzosamente acertaré con 2 de esas personas, ya que hay dos personas entre las diez que tienen un 5. Indudablemente un número es algo muy específico, pero si digo algo muy general como -Cuida tu dolor de espalda, podría ir a peor- o - Vigila esos dolores de cabeza...- Son cosas muy generales  y la probabilidad de acertar es muy alta; el dolor de espalda es muy común y también el dolor de cabeza.


Sl2s





#223
Hola

Cuando vi tu respuesta y nombraste la clase HttpUtility, fue una alegría, por fin lo que buscaba. Incluso te envié un mensaje de agradecimiento para no añadir más comentarios a este tema.

Pero mi alegría se convirtió en decepción al comprobar que dicha clase (HttpUtility) ne se encuentra dentro de System.Web, es más, en el enlace que facilitas HttpUtility Clase, abajo, en los comentarios, puede verse que un usuario tiene el mismo problema, del cual creo no aparece la solución. Se supone que forma parte de .NET Framework 4 pero desde luego al parecer en el mío no está.

Sl2s







#224
Hola

Por fin me he podido poner a programar  ;-)

Perdona que sea tan cabezón, pero de verdad, no me gusta WebBrowser. Y como comenté, según que páginas no me devuelve todas los enlaces. No se porqué.

Finalmente esto es lo que usaré utilizando el sistema que me habéis comentado:

Código (vbnet) [Seleccionar]
      '//Obtiene los enlaces
       'Inicia regex para obtener el link src
       Dim PatternImg As String = "<[^>]+(src)\s*=\s*""?([^"">]+)""?.*?>" '"(?i:<img.*?>)" '"<img(.*?)/>"
       Dim MyRegexSRC As New Regex(PatternImg, RegexOptions.IgnoreCase)
       Dim MyMatchSRC As Match = MyRegexSRC.Match(strCode)
       While MyMatchSRC.Success
           Dim ImgLine As String = MyMatchSRC.Groups(0).Value 'Obtiene una linea tal como: <img src="...\imagen.jpg">
           Dim strLink As String = MyMatchSRC.Groups(2).Value 'Obtiene el link de una imagen

           'Inicia regex para obtener el ancho, alto y valor alt de una imagen a partir de la línea ImgLine
           Dim PatternWidth As String = "<[^>]""?(?:[^>]+(width|height)\s*=\s*""?([^ "">]+)""?\s+(height|width)\s*=\s*""?([^ "">]+)""?)?(?:[^>]+(alt)\s*=\s*""?([^"">]+)""?)?" '"width=""(.*?)"""  "(?i:width="".*?.*?"")"
           Dim MyRegexWidth As New Regex(PatternWidth, RegexOptions.IgnoreCase)
           Dim MyMatchWidth As Match = MyRegexWidth.Match(ImgLine)

           Dim strWidth As String = MyMatchWidth.Groups(2).Value 'Obtiene el ancho
           Dim strHeight As String = MyMatchWidth.Groups(4).Value 'Obtiene el alto
           Dim strAlt As String = MyMatchWidth.Groups(6).Value 'Obtiene el valor Alt

           '....

           MyMatchSRC = MyMatchSRC.NextMatch() 'Continúe el bucle hasta la siguiente coincidencia.
       End While


Sl2s y se agradece la ayuda.
#226
Hola

No consigo obtener el enlace a los que redirecciona google por ejemplo:


https://www.google.es/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiK3Ii9zr7KAhXD0RQKHekoC9kQFggcMAA&url=http%3A%2F%2Fwww.recursosvisualbasic.com.ar%2Fhtm%2Fvb-net%2F54-obtener-links-de-una-pagina-web.htm&usg=AFQjCNGMpwVIQ7z-vWEq6Urag9Vf_UAKGg&bvm=bv.112454388,d.d24


Redirecciona a...:

http://www.recursosvisualbasic.com.ar/htm/vb-net/54-obtener-links-de-una-pagina-web.htm


Yo utilizo el siguiente código para obtener el enlace al que redirecciona una determianda URL

Código (vbnet) [Seleccionar]

#Region "Normalizar URL"
   Public Function ResolverURL(ByVal strUrl As String) As String
       Dim RedirectUrl As String = Nothing
        strUrl = DecodeUrl(strUrl)
       Try
           Dim WebRequest As System.Net.HttpWebRequest = DirectCast(System.Net.HttpWebRequest.Create(strUrl), System.Net.HttpWebRequest)
           With WebRequest
               .UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1"
               'WebRequest.MaximumAutomaticRedirections = 1
               .AllowAutoRedirect = True  '<==importante
               '.ProtocolVersion = System.Net.HttpVersion.Version11
                .Method = "GET"
               '.Timeout = 1000
           End With

           Using webResponse As System.Net.HttpWebResponse = DirectCast(WebRequest.GetResponse, Net.HttpWebResponse)
               RedirectUrl = webResponse.ResponseUri.AbsoluteUri
               webResponse.Close() '<===importante
           End Using
       Catch ex As System.Net.WebException
           If ex.Status = Net.WebExceptionStatus.NameResolutionFailure Then
               MessageBox.Show("El Sitio no existe", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
           End If
       End Try
       Return RedirectUrl
   End Function
  Public Function DecodeUrl(ByVal strUrl As String) As String
       Dim HexCaracter As String()
       HexCaracter = strUrl.Split(CChar("%"))
       For I As Integer = 1 To HexCaracter.Length - 1
           Dim Cr As String = HexCaracter(I).Substring(0, 2)
           Dim newCr As String = Convert.ToChar(Convert.ToInt32(Cr, 16))
           strUrl = strUrl.Replace("%" & Cr, newCr)
       Next
       Return strUrl
   End Function
#End Region



Este código se usa del modo siguiente:
Código (vbnet) [Seleccionar]

Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       TextBox1.Text = ResolverURL(URL)
   End Sub


Sin embargo no me funciona con los enlaces que ofrece Google en el listado de búsqueda.

S2s




Una forma que he ideado es esta:

Código (vbnet) [Seleccionar]


  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim strUrl as String = "https://www.google.es/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwidgYbs98HKAhUJLhoKHRwBBzYQFggcMAA&url=https%3A%2F%2Fes.wikipedia.org%2Fwiki%2FAlbert_Einstein&usg=AFQjCNEpx7ZvmsTJayPwnY-RF0W1AbWLGw&bvm=bv.112454388,d.d2s"

        strUrl = DecodeUrl(strUrl)

       Dim uri As New Uri(strUrl)
       Dim dirs As String = uri.GetComponents(UriComponents.AbsoluteUri, UriFormat.UriEscaped)

       Try
           Dim dirArray As String() = dirs.Split(CChar("="))
           For I As Integer = 1 To dirArray.Length - 1
               If dirArray(I).Length > 4 Then
                   If dirArray(I).Substring(0, 4) = "http" Then
                       strUrl = dirArray(I).Replace("&usg", "")
                       Exit For
                   End If
               End If
           Next
       Catch ex As Exception
       End Try

       TextBox1.Text = strUrl

End Sub
   Public Function DecodeUrl(ByVal strUrl As String) As String
       Dim HexCaracter As String()
       HexCaracter = strUrl.Split(CChar("%"))
       For I As Integer = 1 To HexCaracter.Length - 1
           Dim Cr As String = HexCaracter(I).Substring(0, 2)
           Dim newCr As String = Convert.ToChar(Convert.ToInt32(Cr, 16))
           strUrl = strUrl.Replace("%" & Cr, newCr)
       Next
       Return strUrl
   End Function


Pero mi intención es que conseguir un método general que sirva para cualquier URL sin afectar a URLs que no redireccionen. De otro modo tengo que hacer que el programa determine si es redireccionable y si lo es, si éste es de Google para aplicar el código que acabo de mostrar... Esto no me convence.





Bueno, lo he resuelto de la siguiente manera. Que como dije  obtiene la URL a la que redirecciona de forma selectiva. Si es de Google aplica un método y si no lo es aplica el otro.

Código (vbnet) [Seleccionar]

#Region "Normalizar URL"
   Public Function NormalizarUrl(ByVal strUrl As String) As String
       strUrl = DecodeUrl(strUrl)
       Task.Factory.StartNew(Sub()
                                 If strUrl.Contains("www.google.es/url?") = True Then
                                     '//Obtiene la Url a la que redirecciona
                                     strUrl = ResolverUrlGoogle(strUrl)
                                 Else
                                     '//Si el Url redireciona a otra Url obtiene la Url a la que redirecciona
                                     strUrl = ResolverURL(strUrl)
                                 End If
                                 ComboBox1.Invoke(DirectCast(Sub() ComboBox1.Text = strUrl, MethodInvoker))
                             End Sub)
     
   
       Return strUrl
   End Function
   Public Function DecodeUrl(ByVal strUrl As String) As String
       Dim HexCaracter As String()
       HexCaracter = strUrl.Split(CChar("%"))
       For I As Integer = 1 To HexCaracter.Length - 1
           Dim Cr As String = HexCaracter(I).Substring(0, 2)
           Dim newCr As String = Convert.ToChar(Convert.ToInt32(Cr, 16))
           strUrl = strUrl.Replace("%" & Cr, newCr)
       Next
       Return strUrl
   End Function
   Public Function ResolverUrlGoogle(ByVal strUrl As String) As String

       Dim uri As New Uri(strUrl)
       Dim dirs As String = uri.GetComponents(UriComponents.AbsoluteUri, UriFormat.UriEscaped)
       Try
           Dim dirArray As String() = dirs.Split(CChar("="))
           For I As Integer = 1 To dirArray.Length - 1
               If dirArray(I).Length > 4 Then
                   If dirArray(I).Substring(0, 4) = "http" Then
                       strUrl = dirArray(I).Replace("&usg", "")
                       Exit For
                   End If
               End If
           Next
       Catch ex As Exception
       End Try
       Return strUrl
   End Function
   Public Function ResolverURL(ByVal strUrl As String) As String
       Dim RedirectUrl As String = Nothing
       strUrl = DecodeUrl(strUrl)

       Try
           Dim WebRequest As System.Net.HttpWebRequest = DirectCast(System.Net.HttpWebRequest.Create(strUrl), System.Net.HttpWebRequest)
           With WebRequest
               WebRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1"
               'WebRequest.MaximumAutomaticRedirections = 1
               WebRequest.AllowAutoRedirect = True  '<==importante
           End With
           Using webResponse As System.Net.HttpWebResponse = DirectCast(WebRequest.GetResponse, Net.HttpWebResponse)
               RedirectUrl = webResponse.ResponseUri.AbsoluteUri
               webResponse.Close() '<===importante
           End Using
       Catch ex As System.Net.WebException
           If ex.Status = Net.WebExceptionStatus.NameResolutionFailure Then
               MessageBox.Show("El Sitio no existe", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
           End If
       End Try
       Return RedirectUrl
   End Function
#End Region


Sirve para evitar errores al usar System.Net.HttpWebRequest o System.Net.WebClient con URLs que redireccionan.




NOTA:
He hecho algunas correcciones y modificaciones respecto al código que expuse ayer.
Disculpen las molestias


He añadido por ejemplo esta función:

Código (vb) [Seleccionar]
Public Function DecodeUrl(ByVal strUrl As String) As String
        Dim HexCaracter As String()
        HexCaracter = strUrl.Split(CChar("%"))
        For I As Integer = 1 To HexCaracter.Length - 1
            Dim Cr As String = HexCaracter(I).Substring(0, 2)
            Dim newCr As String = Convert.ToChar(Convert.ToInt32(Cr, 16))
            strUrl = strUrl.Replace("%" & Cr, newCr)
        Next
        Return strUrl
    End Function


Ya que yo creía que sólo había que sustituir "%3A" por ":" y "%2F" por "/". Entonces he visto otro enlace con "%3F" y comprendí que se trata de número de un carácter convertido a hexadecimal. Es decir 3A = 58 que equivale a ":" y 2F = 47 que equivale a "/". He hecho esa función para sustituir cualquier código hexadecimal por su carácter correspondiente. 


Por otro lado la función ResolverUrlGoogle tampoco estaba bien del todo . No todos los enlaces, pasados por split se encuentran el la posición 10 del array. Así que hago que  busque la url dentro del array. De todos modos aún no está perfecto  porque hay enlaces, aunque poco comunes, que se devuelven incompletos o con algún carácter demás.


Sl2s
#227
Hola y felices fiestas para quien las celebre

Gracias a todos por las respuestas. He tardado en responder porque ahora estoy currando y no he tenido tiempo para mí y para programar.

Tras probar varios sistemas me inclino por Regex.  XDocument es para XML y HtmlDocument me obliga a usar WebBroser y parsear desde  el evento DocumentCompleted y tarda un huevo  :-\

También he probado con mshtml.IHTMLDocument2:

Código (vbnet) [Seleccionar]
Imports mshtml 'Debe agregarse la referéncia Microsoft.mshtml para que esté disponible
Public Class Form1

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Dim CodeHtml As String = Nothing
       Using CodeFromStream As System.IO.Stream = GetHttpStream("http://www.google.es")
           '///Convierte Stream a String con codificación  EncodingHtml
           Try
               Dim streamRead As System.IO.StreamReader = _
                           New System.IO.StreamReader(CodeFromStream, System.Text.Encoding.GetEncoding(name:="utf-8"))
               CodeHtml = streamRead.ReadToEnd()
               While CodeHtml = ""
                   My.Application.DoEvents()
               End While
           Catch ex As Exception
           End Try
       End Using

       ' Obtain the document interface
       Dim htmlDocument As IHTMLDocument2 = DirectCast(New HTMLDocument(), IHTMLDocument2)
       ' Construct the document
       htmlDocument.designMode = "On" 'Evita error script
       htmlDocument.write(CodeHtml)
       ListBox1.Items.Clear()

       'IMG
       Dim allElements As IHTMLElementCollection = htmlDocument.body.all.Tags("img")
       For Each element As IHTMLElement In allElements
           Try
               ListBox1.Items.Add(element.getAttribute("src"))
               ListBox1.Items.Add(element.getAttribute("width"))
               ListBox1.Items.Add(element.getAttribute("height"))
               ListBox1.Items.Add(element.getAttribute("alt"))

           Catch ex As Exception
           End Try
       Next

       ' Dim imgElements As IHTMLElementCollection = htmlDocument.images
       'For Each img As IHTMLImgElement In imgElements
       ' ListBox1.Items.Add(img.href)
       ' ListBox1.Items.Add(img.width)
       ' ListBox1.Items.Add(img.height)
       'Try
       '  ListBox1.Items.Add(img.alt)
       'Catch ex As Exception
       ' End Try
       ' Next

   End Sub

 
#Region "Obtener código página"
   Function GetHttpStream(ByVal url As String) As System.IO.Stream

       Dim MyWebRequest As System.Net.HttpWebRequest
       Dim MyWebResponse As System.Net.HttpWebResponse
       Dim CodeStream As System.IO.Stream = Nothing
       Try
           MyWebRequest = CType(System.Net.WebRequest.Create(url), System.Net.HttpWebRequest)
           With MyWebRequest
               .UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
               '.Method = "GET"
               '.Timeout = 10000
               '.ProtocolVersion = System.Net.HttpVersion.Version10
           End With
           MyWebResponse = CType(MyWebRequest.GetResponse(), System.Net.HttpWebResponse)
           CodeStream = MyWebResponse.GetResponseStream()


       Catch ex As Exception
           MessageBox.Show(ex.Message)
       End Try

       Return CodeStream

   End Function
#End Region
End Class



Pero no me devuelve el Width ni el Height. Siempre devuelve 0, no se porqué.

Por otro lado HtmlDocument NO devuelve todos los img, no sé por qué con algunas páginas no muestra todos los enlaces src siempre se deja algunos, cosa que no ocurre usando regex

Sldos
#228
Hola

La verdad no comprendo como funcionan las expresiones regulares, pese a que hay ejemplos en la ayuda msdn.

Estoy intentando obtener la Url de las imágenes de una página html junto con los valores Width, height y alt.

El problema está en que no siempre está en el mismo orden. Es decir primero puede establecerse src después height, width y luego alt:

<img src="..." height="128" width="128" alt"..."/>

También:

<img src="..." width"128" height="128" alt"..."/>


O por el contrario, establecerse el width o el heigth antes que el src:

<img width"128" height="128" src="..."  alt"..."/>

<img height"128" width="128" src="..."  alt"..."/>


Utilizando 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:

Código (vbnet) [Seleccionar]
Dim Pattern As String = "<img[^>]+(src)\s*=\s*""?([^ "">]+)""?(?:[^>]+(width|height)\s*=\s*""?([^ "">]+)""?\s+(height|width)\s*=\s*""?([^ "">]+)""?)?(?:[^>]+(alt)\s*=\s*""?([^"">]+)""?)?"

       Dim re As New Regex(Pattern, RegexOptions.IgnoreCase)
       Dim m As Match = re.Match(code)

       While m.Success

           For I As Integer = 0 To m.Groups.Count - 1
               ListBox1.Items.Add(m.Groups(I).Value)
           Next

       End While



'¿Como puedo obtener los valores independientemente del orden en que se encuentren?

Necesito encontrar los valores Width, height independientemente de si están antes que el src o después


Gracias
#229
 :D
Gracias

Pues sí, era de la configuración regional. :¬¬

Sl2s
#230
Hola

En la empresa donde trabajo los pedidos aparecen con símbolos extraños en sustitución de á,è,ó,...,ñ y ç, que son del tipo á, Ã-, etc

Creo que podría ser que el sistema tiene como configuración regional la alfabetización inglesa, pero no estoy seguro de si es por eso o del programa que imprime los pedidos.

¿Alguna idea?

Gracias