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

#6581
Foro Libre / Re: Ice Bucket Challenge, ¿Que opinas?
5 Septiembre 2014, 22:00 PM
Cita de: Graphixx en  5 Septiembre 2014, 21:51 PMmolaria que hubiera una etiqueta [old] contenido caliente [/old] que solo pudieran ver los mayores, alguien mande la sugerencia a los tios de SMF muajajajajajajja

Y los menores falsificarían su fecha de nacimiento al registrarse xD
#6582
Imagina: ¿Cuantas personas se habrán echo la pregunta de "como eliminar algo" en Batch?, ¿Cuantas veces habrá sido respondida la pregunta?, ¿Cuantos resultados recopilará este Foro o Google sobre esas respuestas?.

Pues lo mismo sucede con la pregunta que acabas de hacer como puedes comprobar ↠ aquí

Y ↠ aquí ↞ tienes una solución.

Con esto quiero decir que porfavor se utilice el buscador del foro o Google para resolver dudas básicas

PD: Por otro lado, si no entiendes el código de la solución o como añadirlo, no dudes en preguntar aquí :)

Saludos!
#6583
Scripting / Re: Extraer Contenido de Txt BAT
5 Septiembre 2014, 19:20 PM
Hola Slikp

No he comprendido porque relacionas mis sugerencias con mi antiguo nick "Elektro H@cker", pero si que es verdad que siempre que surge alguien que quiere resolver un problema de este estilo usando Batch intento hacerle saber que Batch no es una buena elección, el único motivo por el que sugiero esto es simple: Batch no fue diseñado para ciertas tareas complejas, pero ojo, no estoy insinuando que esta tarea en particular sea compleja para un programador, sino que es una tarea compleja para la capacidad de Batch. Parsear un documento de texto... , pero parsear un tipo de documento estructurado... No.

No hay un mejor lenguaje para esta tarea, puedes hacerlo con cualquier lenguaje de hoy en día ...incluyendo Batch como te mostré, pero hay lenguajes (lenguajes de verdad, no Batch) que te proporcionan Classes y/o herramientas adicionales de terceros especializadas en este tipo de tareas con las que poder lograr un mejor rendimiento y fiabilidad y conseguir mejores resultados, como son Ruby, Python, o C# / VB.NET (entre otros).

¿Cual es el lenguaje en el que yo haría este tipo de tarea?: C# o VB.NET (ambos son "casi lo mismo" y se conseguiría el mismo resultado al menos para esa tarea)
¿Porqué?: Porque entre todos los lenguajes que he llegado a manejar este es el que decidí tomar como lenguaje principal ya que es el que más me gusta en todas sus características (hablo de VB.NET) las cuales no me voy a poner a describirlas ahora una por una, pero sin duda prefiero hacerlo en .NET que con Scripting.
¿Como lo haría?: En caso de que se trate de un archivo XML, pues parseando con la Class XmlDocument, y en caso de que se trate de un documento Html pues con la librería HtmlAgilityPack.

Si prefieres hacerlo en un lenguaje de Scripting entonces sinceramente no sabría cual recomendarte ni porqué, como ya he dicho puedes hacerlo en cualquiera ya que ofrecen herramientas especializadas, por ejemplo en Ruby tienes la gema 'Nokogori' y en Python2.X tienes el módulo Xml y en Python3.X el módulo Html, solo por nombrar alguna manera de hacerlo en ambos lenguajes, que haber hay más... una infinidad de librerías de terceros.

Mi consejo es que si no quieres complicarte la vida aprendiendo el uso de un lenguaje entonces utilices Batch para hacerlo, siguiendo el ejemplo que te mostré (te expliqué lo que necesitas añadirle al Script para que cumpla las necesidades).

Saludos!
#6584
Comparto algunos Snippets relacionados con los controles de Telerik: http://www.telerik.com/products/winforms.aspx

[Telerik] [RadDropDownList] Select next item on MouseWheel.

Ejemplo de como seleccionar el item anterior o siguiente usando la rueda del mouse.

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

    ''' <summary>
    ''' Handles the MouseDown event of the RadDropDownList1 control.
    ''' </summary>
    ''' <param name="sender">The source of the event.</param>
    ''' <param name="e">The <see cref="MouseEventArgs"/> instance containing the event data.</param>
    Private Sub RadDropDownList1_MouseWheel(Byval sender As Object, Byval e As MouseEventArgs) _
    Handles RadDropDownList1.MouseWheel

        Select Case e.Delta

            Case Is > 0 ' MouseWhell scroll up.
                If sender.SelectedIndex > 0I Then
                    sender.SelectedIndex -= 1I
                End If

            Case Else ' MouseWhell scroll down.
                If sender.SelectedIndex < sender.Items.Count Then
                    sender.SelectedIndex += 1I
                End If

        End Select

    End Sub

End Class





[Telerik] [RadDropDownList] Align text after selecting an item.

Ejemplo de como alinear el texto después de seleccionar un item.


Código (vbnet) [Seleccionar]
    ''' <summary>
    ''' Handles the SelectedIndexChanged event of the RadDropDownList1 control.
    ''' </summary>
    ''' <param name="sender">The source of the event.</param>
    ''' <param name="e">The <see cref="Data.PositionChangedEventArgs"/> instance containing the event data.</param>
    Private Sub RadDropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As Data.PositionChangedEventArgs) _
    Handles RadDropDownList1.SelectedIndexChanged

        ' Center the selected item text.
        sender.DropDownListElement.EditableElement.TextAlignment = ContentAlignment.MiddleCenter

    End Sub





[Telerik] [RadMessageBox] Example.

Ejemplo de como usar un RadMessageBox

Código (vbnet) [Seleccionar]
Imports Telerik.WinControls

Public Class RadMessageBox_TestForm

    Private Sub RadMessageBox_TestForm_Load() Handles MyBase.Load

        RadMessageBox.SetThemeName("VisualStudio2012Dark")
        ' RadMessageBox.SetThemeName(Me.ThemeName) ' Use this for RadForm or other Rad control.

        RadMessageBox.Instance.Cursor = Cursors.Arrow
        RadMessageBox.Instance.EnableBeep = True
        RadMessageBox.Instance.ShowInTaskbar = False
        RadMessageBox.Instance.ShowIcon = True
        RadMessageBox.Instance.Icon = SystemIcons.Application
        RadMessageBox.Instance.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog

        RadMessageBox.Show("Hello World !", Me.Name, MessageBoxButtons.OK, RadMessageIcon.Info)

    End Sub

End Class





[Telerik] [RadGridView] Example.

Ejemplo de como usar un RadGridView.

Código (vbnet) [Seleccionar]
Imports Telerik.WinControls.UI

Public Class RadGridView_TestForm

    ''' <summary>
    ''' The row collection of the RadGridView.
    ''' </summary>
    Private Rows As New List(Of GridViewDataRowInfo)

    Private Sub RadGridView_TestForm_Load() Handles MyBase.Load

        ' Set the RadGridView language localization.
        ' RadGridLocalizationProvider.CurrentProvider = New MyRadGridViewLocalizationProvider_Spanish

        ' Create some columns.
        With RadGridView1
            .Columns.Add("MyColumnString", "Strings")
            .Columns.Add("MyColumnHour", "Hours")
            .Columns.Add("MyColumnInteger", "Integers")
            .Columns.Add("MyColumnDouble", "Doubles")
        End With

        ' Set the RadGridView properties.
        With RadGridView1

            .ThemeName = "VisualStudio2012Dark" ' The visual theme.
            .EnableAlternatingRowColor = True ' Enable color alternating between rows.
            .TableElement.AlternatingRowColor = Color.FromArgb(52, 52, 56) ' The alternate color, a dark-gray.
            .AutoGenerateColumns = False ' Deny the control to auto-generate columns when setting a DataSource.
            .ReadOnly = True ' Disable Adding, Removing, and Editing on the control.

            ' Set the column datatypes.
            .Columns("MyColumnString").DataType = GetType(String)
            .Columns("MyColumnHour").DataType = GetType(String)
            .Columns("MyColumnInteger").DataType = GetType(Integer)
            .Columns("MyColumnDouble").DataType = GetType(Double)

        End With

        ' Create a row.
        Dim Row As New GridViewDataRowInfo(Me.RadGridView1.MasterView)
        With Row
            .Cells(0).Value = "Hello!"
            .Cells(1).Value = "22:00"
            .Cells(2).Value = 10
            .Cells(3).Value = 5.5
        End With
        Me.Rows.Add(Row)

        ' add the row in the grid.
        Me.RadGridView1.Rows.AddRange(Rows.ToArray)

    End Sub

End Class





[Telerik] [RadGridView] Export as CSV.

Ejemplo de como exportar un RadGridView a CSV.

Código (vbnet) [Seleccionar]
        Dim Exporter As New ExportToCSV(Me.RadGridView1)
        With Exporter
            .HiddenColumnOption = HiddenOption.DoNotExport ' Don't export hidden columns.
            .HiddenRowOption = HiddenOption.DoNotExport ' Don't export hidden rows.
            .SummariesExportOption = SummariesOption.DoNotExport
            .ColumnDelimiter = " | "
            .RowDelimiter = "; "
            .
        End With

        Exporter.RunExport("C:\Exported Data.xls")





[Telerik] [RadGridView] Export as HTML.

Ejemplo de como exportar un RadGridView a HTML.

Código (vbnet) [Seleccionar]
        ' Export the data contained in the RadGridView DataSource.
        Dim Exporter As New ExportToHTML(Me.RadGridView1)
        With Exporter
            .HiddenColumnOption = HiddenOption.DoNotExport ' Don't export hidden columns.
            .HiddenRowOption = HiddenOption.DoNotExport ' Don't export hidden rows.
            .SummariesExportOption = SummariesOption.DoNotExport
            .AutoSizeColumns = False
            .ExportVisualSettings = True
            .FileExtension = "htm"
            .TableBorderThickness = 2
            .TableCaption = "My Exported Table"
        End With

        Exporter.RunExport("C:\Exported Data.htm")





[Telerik] [RadGridView] Export as XLS.

Ejemplo de como exportar el DataSource de un RadGridView a Excel (xls).

Código (vbnet) [Seleccionar]
Imports Telerik.WinControls.UI
Imports Telerik.WinControls.UI.Export
Imports Telerik.WinControls.UI.Localization

Public Class RadGridView_TestForm

    Private Sub RadGridView_TestForm_Load() Handles MyBase.Load

        ' Set the RadGridView language localization.
        ' RadGridLocalizationProvider.CurrentProvider = New MyRadGridViewLocalizationProvider_Spanish

        ' Set the RadGridView properties.
        With RadGridView1

            .ThemeName = "VisualStudio2012Dark" ' The visual theme.
            .EnableAlternatingRowColor = True ' Enable color alternating between rows.
            .TableElement.AlternatingRowColor = Color.FromArgb(52, 52, 56) ' The alternate color, a dark-gray.
            .AutoGenerateColumns = False ' Deny the control to auto-generate columns when setting a DataSource.
            .ReadOnly = True ' Disable Adding, Removing, and Editing on the control.

            ' Set the column datatypes.
            .Columns("MyColumnString").DataType = GetType(String)
            .Columns("MyColumnHour").DataType = GetType(String)
            .Columns("MyColumnInteger").DataType = GetType(Integer)
            .Columns("MyColumnDouble").DataType = GetType(Double)

            ' Set the excel export datatypes.
            .Columns("MyColumnString").ExcelExportType = DisplayFormatType.Text
            .Columns("MyColumnHour").ExcelExportType = DisplayFormatType.Custom
            .Columns("MyColumnHour").ExcelExportFormatString = "h:mm"
            .Columns("MyColumnInteger").ExcelExportType = DisplayFormatType.Custom
            .Columns("MyColumnInteger").ExcelExportFormatString = "0"
            .Columns("MyColumnDouble").ExcelExportType = DisplayFormatType.Custom
            .Columns("MyColumnDouble").ExcelExportFormatString = "0.00"

        End With

        ' Export the data contained in the RadGridView DataSource.
        Dim Exporter As New ExportToExcelML(Me.RadGridView1)
        With Exporter
            .HiddenColumnOption = HiddenOption.DoNotExport ' Don't export hidden columns.
            .HiddenRowOption = HiddenOption.DoNotExport ' Don't export hidden rows.
            .ExportVisualSettings = True ' Export the RadGridView current theme.
            .SheetMaxRows = ExcelMaxRows._65536
            .SheetName = "Betfair Market Analyzer"
            .SummariesExportOption = SummariesOption.DoNotExport
        End With

        Exporter.RunExport("C:\Exported Data.xls")

    End Sub

End Class





[Telerik] [RadSplitButton] Set a Default Item.

Ejemplo de como asignar un item por defecto.

Código (vbnet) [Seleccionar]
Imports Telerik.WinControls.UI

Public Class RadSplitButton_TestForm

    Dim WithEvents MenuItem1 As New RadMenuItem With {.Text = "Item 1"}
    Dim WithEvents MenuItem2 As New RadMenuItem With {.Text = "Item 2"}
    Dim WithEvents MenuItem3 As New RadMenuItem With {.Text = "Item 3"}

    Private Sub RadSplitButton_TestForm_Load() Handles MyBase.Load

        RadSplitButton1.Items.AddRange({MenuItem1, MenuItem2, MenuItem3})
        RadSplitButton1.DefaultItem = MenuItem2

    End Sub

    Private Sub MenuItem2_Click() Handles MenuItem2.Click

        MsgBox("I'm the default item!")

    End Sub

End Class





[Telerik] [RadSplitButton] Distinguish an Arrow click without a Default Item set.

Ejemplo de como distinguir cuando se hace un click sobre el control o sobre la flecha del control.

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

    ''' <summary>
    ''' Flag that determines whether the RadSplitButton menu-opening should be canceled.
    ''' </summary>
    Private CancelOpening As Boolean = False

    Private Sub RadSplitButton1_DropDownOpening(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) _
    Handles RadSplitButton1.DropDownOpening

        e.Cancel = Me.CancelOpening

    End Sub

    Private Sub RadSplitButton1_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) _
    Handles RadSplitButton1.MouseMove

        Me.CancelOpening = Not sender.DropDownButtonElement.ArrowButton.IsMouseOverElement

    End Sub

    Private Sub RadSplitButton1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) _
    Handles RadSplitButton1.Click

        If e.Button = Windows.Forms.MouseButtons.Left AndAlso Me.CancelOpening Then
            MsgBox("clicked out the arrow!")

        ElseIf Not Me.CancelOpening Then
            MsgBox("clicked over the arrow!")

        End If

    End Sub

End Class





[Telerik] [RadDropDownButton] Distinguish an Arrow click without a Default Item set.

Ejemplo de como distinguir cuando se hace un click sobre el control o sobre la flecha del control.

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

    ''' <summary>
    ''' Flag that determines whether the RadSplitButton menu-opening should be canceled.
    ''' </summary>
    Private CancelOpening As Boolean = False

    Private Sub RadDropDownButton1_DropDownOpening(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) _
    Handles RadDropDownButton1.DropDownOpening

        e.Cancel = Me.CancelOpening

    End Sub

    Private Sub RadDropDownButton1_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) _
    Handles RadDropDownButton1.MouseMove

        Me.CancelOpening = Not sender.DropDownButtonElement.ArrowButton.IsMouseOverElement

    End Sub

    Private Sub RadDropDownButton1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) _
    Handles RadDropDownButton1.Click

        If e.Button = Windows.Forms.MouseButtons.Left AndAlso Me.CancelOpening Then
            MsgBox("clicked out the arrow!")

        ElseIf Not Me.CancelOpening Then
            MsgBox("clicked over the arrow!")

        End If

    End Sub

End Class
#6585
Foro Libre / Re: Ice Bucket Challenge, ¿Que opinas?
5 Septiembre 2014, 18:10 PM
Cita de: ivancea96 en  5 Septiembre 2014, 17:38 PMPor menos que te gusten, no es razón para decir "las leyes no valen para nada".

¿No es razón?

En el momento en que un grupo de señores ajenos a ti, que son unos completos desconocidos con el que por no tener no tendrás ni relación en el arbol genealógico de su descendencia, y esos desconocidos se ponen deacuerdo entre ellos sin consultarlo contigo para intentar decidir lo que está bien para ti y lo que está mal, y como debes vivir tu vida haciendo esto o no haciendo aquello... ¡como si te conocieran!, imponiendo reglas para hacerse dueño del rumbo de tu vida, cuando solo tú deberías poder evaluar las acciones que son buenas y malas o las que debes o no debes hacer en tu propia vida, pero esto no es así, alguien decide todas estas cosas por ti, y eso que hacen con las leyes se llama Control, intentan controlarnos para su beneficio y no para el tuyo propio, y en el momento en que aceptas las leyes como son te vuelves un ser vivo Sumiso, como un perro que entra a una manada y le debe sumisión al macho Alfa y a todo lo que el macho alfa diga que hay que hacer y como se debe hacer, y si no te gusta se te castigará por tener la mala idea de pensar por ti mismo y cuestionarte las leyes, ¡pero no somos Perros!. Pues en ese momento creo que si tenemos una razón para decir que "las leyes no valen para nada".

Así lo veo yo, pero con estas palabras temrino el tema por mi parte, que sin querer lo he desvirtuado un poco hacia el tema leyes, lo siento.

Un saludo!
#6586
Foro Libre / Re: Ice Bucket Challenge, ¿Que opinas?
5 Septiembre 2014, 17:15 PM
Cita de: ivancea96 en  5 Septiembre 2014, 17:05 PMMientras sea legal, están en su derecho

Déjame decirte una cosa, mi intención no es contradecir tus ideas, creeme que me gustaría poder darte la razón o a cualquiera que dijera eso, pero es que NO, considero ridículo pensar así (al menos a estas alturas, antaño quizás no), ¿sabes que por ejemplo en la ciudad de Denver (USA, para variar) es ilegal sentarse en cualquier parte de las calles?, de echo hay videos de policias poniendo multas a vagabundos por el simple echo de sentarse en una escalera, es indignante, y otra ridícula ley que sinó recuerdo mal es en algún lugar de Francia donde está prohibido besarse en público (aunque esto no puedo confirmarlo porque no lo recuerdo bien), o una ley que prohibe recoger la lluvia que cae en tu propia casa por la razón de que esa agua no se considera parte de la vivienda que compraste (está ley es de USA también, para variar) en Philadelphia si no recuerdo mal.

Conclusión:
Las leyes nunca han valido para nada, ni sirven para nada, quizás las leyes empezaron a ser fundadas con bondad con la intención de no cometer actos que casi todos consideramos Malvados, pero es obvio que las leyes actuales se han corrompido, y las antiguas leyes se han modificado para corromperlas de la misma manera,
cualquier persona debería tener derecho a hacer lo que quisiera con su vida, incluso a robar o asesinar... al menos en defensa propia, pues forma parte de la naturaleza (y no hablo de la naturaleza humana, que también) y se ha echo así desde millones de años atrás.

¿Quien es más delincuente, el asesino, o el carcelario que enjaula encierra al asesino en una pequeña celda aislada 23 horas del día durante toda su vida con 1 hora de patio, privandole así de su libertad como ser vivo?, así es como se hace en USA (para variar otra vez), parece que nos hemos olvidado de las segundas oportunidades.
Pero que vamos a decir del pobre y bondadoso carcelario, el solo está cumpliendo "La Ley", y eso lo convierte en una buena persona ;).

Y a esto me vuelvo a referir, a las gilipolleces que nos inculcan desde pequeños, tomamos las leyes como algo rotundo y con fundamento porque, claro... las han impuesto personas de los altos cargos las cuales están cualificadas para tomar decisiones y evaluarlas, y claro, ¡ ellos imponen leyes por nuestro bien !, sin ningún interés económico y otros propósitos que solo les benefician a ellos, claro que si, estoy orgulloso de que existan leyes, y cumpliré todas las leyes que me sea posible :).

Un saludo!
#6587
Foro Libre / Re: Ice Bucket Challenge, ¿Que opinas?
5 Septiembre 2014, 17:01 PM
Cita de: ivancea96 en  5 Septiembre 2014, 16:49 PMYo no le veo ningún problema.

Así es como se empieza a derrumbar el mundo poco a poco, pensamos que los problemas de ahora no son un problema para nosotros, no le vemos inconveniente alguno porque pensamos que la gente es libre de hacer lo que quieran y mientras eso no nos afecte pues que lo sigan haciendo, ¿verdad?, la lógica está bien, yo hace años pensaba de la misma manera, y me la sudaba lo que los demás hicieran, pero es que ni ellos son personas libres, y porsupuesto Sí que nos afecta, quizás no nos afecte de manera directa, pero como especie nos afecta a todos, cosas como este "reto" afectarán al razonamiento, inteligencia, y capacidad de reflexión y/o decisión de futuras generaciones... a nuestros hijos y a sus hijos, y digo "reto" por no hablar de otros problemas más serios de la sociedad humana, y sinó que me lo digan dentro de 50 años cuando hagan el "reto" de: "Mójate el chip que llevas implantado en el cerebro para provocar un mini-cortociruito, así te sentirás identificado con el nuevo virus 'Skynet' para donar dinero por la causa".

PD: Pero ojalá tengas razón.

Saludos!
#6588
Se haría así:
Código (dos) [Seleccionar]
Del /Q /S /A /F "%Temp%\*"

O también:
Código (dos) [Seleccionar]
RD /Q /S "%Temp%\" && (MKDir "%Temp%")

Pero lo correcto sería dejar que el limpiador de Windows eliminase el contenido del directorio temporal y decida que archivos se deben eliminar, pues NO es sano eliminar todo de golpe ya que algunos archivos temporales se pueden encontrar abiertos (en uso) por el S.O. u otras aplicaciones del sistema y por ende los archivos que estén relacionados con esos archivos en uso no deberían eliminarse a la ligera.

Como llamar al limpiador de Windows para eliminar solamente el contenido de la carpeta Temporal:
Código (dos) [Seleccionar]
@Echo OFF

:: Converted with Reg2Bat by Elektro: http://foro.elhacker.net/net/source_reg2bat_convierte_archivos_de_registro_a_scripts_batch-t394702.0.html
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Temporary Files" /V "StateFlags0030" /T "REG_DWORD" /D "0x00000002" /F 1>NUL

CLEANMGR.exe /sagerun:30

Pause&Exit


Saludos
#6589
Foro Libre / Re: Pelicula de los años 80's
4 Septiembre 2014, 19:48 PM
 ??

http://www.imdb.com/title/tt0092834/

No tengo ni idea de si será esa, solo busqué en Google por: "80s film angel fall in love"
#6590
BetfairUtil

Con esta class pueden analizar los próximos eventos de un mercado de futbol de la página Betfair, para meterlos por ejemplo como DataSource de un GridView:



Nota: es necesaria la librería HtmlAgilityPack.


Código (vbnet) [Seleccionar]
' ***********************************************************************
' Author           : Elektro
' Last Modified On : 09-01-2014
' ***********************************************************************
' <copyright file="BetfairUtil.vb" company="Elektro Studios">
'     Copyright (c) Elektro Studios. All rights reserved.
' </copyright>
' ***********************************************************************

#Region " Imports "

Imports HtmlAgilityPack
Imports System.Web

#End Region

''' <summary>
''' Contains web related methods for Betfair.
''' </summary>
Public Class BetfairUtil

#Region " XPath Expressions "

   ''' <summary>
   ''' XPath to locate the coming-up events grid.
   ''' </summary>
   Private Shared ReadOnly XPathComingUpGrid As String = "//*/ul[1][@class='event-list']/li[@class='avb-row COMING_UP']/*"

   ''' <summary>
   ''' XPath to locate the home team name.
   ''' </summary>
   Private Shared ReadOnly XPathHomeTeam As String = ".//span[@class='home-team-name']"

   ''' <summary>
   ''' XPath to locate the away team name.
   ''' </summary>
   Private Shared ReadOnly XPathAwayTeam As String = ".//span[@class='away-team-name']"

   ''' <summary>
   ''' XPath to locate the day which the teams will play.
   ''' </summary>
   Private Shared ReadOnly XPathPlayDay As String = ".//span[@class='date']"

   ''' <summary>
   ''' XPath to locate the hour at which the teams will play.
   ''' </summary>
   Private Shared ReadOnly XPathPlayHour As String = XPathPlayDay

   ''' <summary>
   ''' XPath to locate the odds value 1.
   ''' </summary>
   Private Shared ReadOnly XPathOddResult1 As String = ".//*/li[@class='selection sel-0']/*/span['ui-runner-price*']"

   ''' <summary>
   ''' XPath to locate the odds value 2.
   ''' </summary>
   Private Shared ReadOnly XPathOddResult2 As String = ".//*/li[@class='selection sel-1']/*/span['ui-runner-price*']"

   ''' <summary>
   ''' XPath to locate the odds value 3.
   ''' </summary>
   Private Shared ReadOnly XPathOddResult3 As String = ".//*/li[@class='selection sel-2']/*/span['ui-runner-price*']"

#End Region

#Region " Types "

   ''' <summary>
   ''' Specifies an event info.
   ''' </summary>
   Public Class BetfairEventInfo

       ''' <summary>
       ''' Gets or sets the home team name.
       ''' </summary>
       ''' <value>The home team name.</value>
       Public Property HomeTeam As String

       ''' <summary>
       ''' Gets or sets the away team name.
       ''' </summary>
       ''' <value>The away team name.</value>
       Public Property AwayTeam As String

       ''' <summary>
       ''' Gets or sets the day which the teams will play.
       ''' </summary>
       ''' <value>The day which the teams will play.</value>
       Public Property PlayDay As String

       ''' <summary>
       ''' Gets or sets the hour at which the teams will play.
       ''' </summary>
       ''' <value>The hour at which the teams will play.</value>
       Public Property PlayHour As String

       ''' <summary>
       ''' Gets or sets the odds value for result '1'.
       ''' (which depending on the Betfair section could be the value for column-names: "1", "Yes" or "More than...")
       ''' </summary>
       ''' <value>The odds value for result '1'.</value>
       Public Property Result1 As Double

       ''' <summary>
       ''' Gets or sets the odds value for result '2'.
       ''' (which depending on the Betfair section could be the value for column-names: "X", "No" or "Less than...")
       ''' </summary>
       ''' <value>The odds value for result '2'.</value>
       Public Property Result2 As Double

       ''' <summary>
       ''' (which depending on the Betfair section could be the value for column-names: "2")
       ''' </summary>
       ''' <value>The odds value for result 'X'.</value>
       Public Property ResultX As Double

   End Class

#End Region

#Region " Public Methods "

   ''' <summary>
   ''' Gets the coming-up events from a Betfair page.
   ''' </summary>
   ''' <param name="HtmlSource">The Betfair webpage raw Html source-code to parse the events.</param>
   ''' <returns>List(Of EventInfo).</returns>
   ''' <exception cref="System.Exception">Node not found in the html source-code, maybe there is any coming-up event?</exception>
   Public Shared Function GetComingUpEvents(ByVal HtmlSource As String) As List(Of BetfairEventInfo)

       ' The event collection to add events.
       Dim EventInfoList As New List(Of BetfairEventInfo)

       ' The current event info.
       Dim EventInfo As BetfairEventInfo

       ' Initialize the HtmlDoc object.
       Dim Doc As New HtmlDocument

       ' Load the Html document.
       Doc.LoadHtml(HtmlSource)

       ' A temporal node to determine whether the node exist.
       Dim tempNode As HtmlNode

       ' The HtmlDocument nodes to analyze.
       Dim Nodes As HtmlNodeCollection

       ' Select the Teams nodes.
       Nodes = Doc.DocumentNode.SelectNodes(XPathComingUpGrid)

       If Nodes Is Nothing Then ' Node not found in the html source-code.
           Throw New Exception("Node not found in the html source-code, maybe there is any coming-up event?")
           Return Nothing
       End If

       ' Loop trough the nodes.
       For Each Node As HtmlNode In Nodes

           EventInfo = New BetfairEventInfo

           ' Retrieve and set the home team name.
           EventInfo.HomeTeam = HttpUtility.HtmlDecode(Node.SelectSingleNode(XPathHomeTeam).InnerText.
                                                       Replace("(W)", String.Empty).
                                                       Replace("(HT)", String.Empty).
                                                       Replace("(QAT)", String.Empty).
                                                       Replace("(Uru)", String.Empty).
                                                       Replace("(Ecu)", String.Empty).
                                                       Replace("(Bol)", String.Empty).
                                                       Trim)

           ' Retrieve and set the away team name.
           EventInfo.AwayTeam = HttpUtility.HtmlDecode(Node.SelectSingleNode(XPathAwayTeam).InnerText.
                                                       Replace("(W)", String.Empty).
                                                       Replace("(HT)", String.Empty).
                                                       Replace("(QAT)", String.Empty).
                                                       Replace("(Uru)", String.Empty).
                                                       Replace("(Ecu)", String.Empty).
                                                       Replace("(Bol)", String.Empty).
                                                       Trim)

           ' Retrieve and set the day which the teams will play.
           tempNode = Node.SelectSingleNode(XPathPlayDay)
           If tempNode IsNot Nothing Then

               EventInfo.PlayDay = HttpUtility.HtmlDecode(Node.SelectSingleNode(XPathPlayDay).
                                                          InnerText.
                                                          Trim)

               ' This value can contains different words or one word;
               ' Such as: "Mañana 14:00" or "14:00" or "03 Sep 14".
               ' If the value is only the hour, the day is today.
               If EventInfo.PlayDay Like "##:##" Then
                   EventInfo.PlayDay = "Hoy"

               ElseIf EventInfo.PlayDay Like "Mañana*" Then
                   EventInfo.PlayDay = EventInfo.PlayDay.Split(" "c).First

               End If

               If Not EventInfo.PlayDay Like "## *" Then

                   ' Retrieve and set the hour at which the teams will play.
                   EventInfo.PlayHour = HttpUtility.HtmlDecode(Node.SelectSingleNode(XPathPlayHour).
                                                               InnerText.
                                                               Trim.
                                                               Split(" "c).Last)
               Else
                   EventInfo.PlayHour = "N/A" ' Unknown, the hour is not displayed.
               End If

           Else
               EventInfo.PlayDay = "Error"
               EventInfo.PlayHour = "Error"

           End If

           ' Retrieve and set the odds for result '1'.
           tempNode = Node.SelectSingleNode(XPathOddResult1) ' Test whether the node exists.
           If tempNode IsNot Nothing Then
               If String.IsNullOrEmpty(HttpUtility.HtmlDecode(Node.SelectSingleNode(XPathOddResult1).InnerText).Trim) _
               OrElse String.IsNullOrWhiteSpace(HttpUtility.HtmlDecode(Node.SelectSingleNode(XPathOddResult1).InnerText).Trim) _
               OrElse HttpUtility.HtmlDecode(Node.SelectSingleNode(XPathOddResult1).InnerText).Trim.Equals("NC", StringComparison.OrdinalIgnoreCase) Then
                   EventInfo.Result1 = 0

               Else
                   EventInfo.Result1 = Node.SelectSingleNode(XPathOddResult1).InnerText.Trim().Replace(".", ",")
               End If

           Else
               EventInfo.Result1 = 0
           End If

           ' Retrieve and set the odds for result '2'.
           tempNode = Node.SelectSingleNode(XPathOddResult2) ' Test whether the node exists.
           If tempNode IsNot Nothing Then
               If String.IsNullOrEmpty(HttpUtility.HtmlDecode(Node.SelectSingleNode(XPathOddResult2).InnerText).Trim) _
               OrElse String.IsNullOrWhiteSpace(HttpUtility.HtmlDecode(Node.SelectSingleNode(XPathOddResult2).InnerText).Trim) _
               OrElse HttpUtility.HtmlDecode(Node.SelectSingleNode(XPathOddResult2).InnerText).Trim.Equals("NC", StringComparison.OrdinalIgnoreCase) Then
                   EventInfo.Result2 = 0

               Else
                   EventInfo.Result2 = Node.SelectSingleNode(XPathOddResult2).InnerText.Trim().Replace(".", ",")

               End If

           Else
               EventInfo.Result2 = 0
           End If

           ' Retrieve and set the odds for result 'X'.
           tempNode = Node.SelectSingleNode(XPathOddResult3) ' Test whether the node exists.
           If tempNode IsNot Nothing Then
               If String.IsNullOrEmpty(HttpUtility.HtmlDecode(Node.SelectSingleNode(XPathOddResult3).InnerText).Trim) _
               OrElse String.IsNullOrWhiteSpace(HttpUtility.HtmlDecode(Node.SelectSingleNode(XPathOddResult3).InnerText).Trim) _
               OrElse HttpUtility.HtmlDecode(Node.SelectSingleNode(XPathOddResult3).InnerText).Trim.Equals("NC", StringComparison.OrdinalIgnoreCase) Then
                   EventInfo.ResultX = 0

               Else
                   EventInfo.ResultX = Node.SelectSingleNode(XPathOddResult3).InnerText.Trim().Replace(".", ",")

               End If
           Else
               EventInfo.ResultX = 0
           End If

           ' Add the event-into into the event collection.
           EventInfoList.Add(EventInfo)

       Next Node

       Return EventInfoList

   End Function

#End Region

End Class


Ejemplo de uso:

Código (vbnet) [Seleccionar]
   ''' <summary>
   ''' Contains the Betfair coming-up events-info.
   ''' </summary>
   Private ComingUpEvents As List(Of BetfairEventInfo)

   ' Parse the Betfair page source-code to get the events.
   Me.ComingUpEvents = BetfairUtil.GetComingUpEvents(Me.HtmlSource)