Ergebnisse der DB (Deutsche Bahn) Suche in ListView darstellen

  • VB.NET

Es gibt 39 Antworten in diesem Thema. Der letzte Beitrag () ist von Nikx.

    Ergebnisse der DB (Deutsche Bahn) Suche in ListView darstellen

    Hey :D

    Ich versuche derzeit vergeblich das erste Suchergebnis dieser Suche:
    Klick in diese: Klick ListView einzutragen.

    @Lukas: sagte mir zwar das ich Regex benutzen soll, ich scheitere jedoch total am auslesen der Daten / am RegEx-Verständnis.
    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Zunächst mal solltest du die einzelnen Einträge der Tabelle splitten und vom restlichen Quellcode trennen, das dürfte dich schonmal ein Stück weiter bringen. Jedes Ergebnis in der Tabelle kann so z.B. einer List(Of String) eingeordnet werden, um später bequemer weiterverarbeitet zu werden.

    Wie hier zu sehen ist, bildet immer eine Klasse firstrow mit last einen Eintrag.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    @Lukas: Klapp die Klasse mal auf. Da blick ich mal wieder nicht durch...
    Könntest du mir anhand des Abfahrtbahnhofes mal ein Beispiel geben?
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

    VB.NET-Quellcode

    1. <div class="resultDep">(?<resultDep>.*)</div>


    Das ist das Pattern für den Abfahrtsbahnhof. Das kannst du problemlos auf alles weitere übertragen.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Ich teste das mal eben...
    *Edit: Und welcher regEx ist das dann? Replace wohl kaum und Split auch net...
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Ich dachte, du wolltest dich laut der PN mal auf MSDN umtun? Der richtige Weg, aber offenbar hast du ihn nicht eingeschlagen?

    msdn.microsoft.com/en-us/library/twcw2f1c.aspx
    msdn.microsoft.com/en-us/libra…larexpressions.regex.aspx
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Hab dann erstmal den Thread hier erstellt, mir wurde ja gesagt ich werde nicht in Grund und Boden gehaun :D
    Egal, ich geh da mal hin.

    //Edit: @Lukas: Was soll denn dann der Input sein (bei .Match)? Und: Könntest du den Pattern erklären?
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Nikx“ ()

    msdn.microsoft.com/en-us/library/bk1x0726

    Ich persönlich bevorzuge diese Variante von .Match:

    VB.NET-Quellcode

    1. Dim match as Match = Regex.Match(<input>, <pattern>, <RegexOptions>)


    input: Der zu durchsuchende String
    pattern: Das Pattern
    RegexOptions: Empfiehlt sich hier auf MultiLine, da es im Quellcode über mehrere Zeilen geht.

    Das Pattern greift eine beliebige Zeichenfolge zwischen <div class="resultDep"> und dem Endtag </div> ab.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Und was ist dann Input?
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Ich wiederhole mich ungerne, aber:

    Lukas schrieb:

    Der zu durchsuchende String
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Glaube ich verstehs nun halbwegs.
    Also muss da der DocumentText rein?
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Welcher DocumentText? Versuch es um Himmels Willen nicht mit einem WebBrowser-Control. Lade dir den Quelltext per WebClient.DownloadString herunter. Das erspart den Cancer in Form des Webbrowser-Elementes.

    Das Grundprinzip von RegEx aber klar, ja? Ansonsten lege ich dir mal Wikipedia als Hilfequelle ans Herz.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    VB.NET-Quellcode

    1. Dim s As String = WebBrowser1.DocumentText
    2. Dim Pattern As String = ("""<div class=""resultDep"">(?<resultDep>.*)</div>")
    3. Dim r As Regex = New Regex(Pattern, RegexOptions.IgnoreCase)
    4. Dim match As Match = Regex.Match(s, Pattern, RegexOptions.Multiline)
    5. While match.Success
    6. MsgBox(match.Value)
    7. End While


    Trotz geöffneter WebSite und allem kommt nix. Keine Matches?

    @Lukas:
    Zusätzlich: WebBrowser ist aber im Moment das beste, da ich mich da grade so ans füllen von TextBoxen, klicken von
    Buttons, checken von Checkboxen und dem ändern von Radioboxen und ListBoxindexes vertrautgemacht habe. Schlimm?
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Zunächst mal ist das Pattern falsch, wo kommen die Anführungszeichen am Start her? Aus dem Pattern von oben müssen nur die beiden schon vorhandenen Anführungszeichen behandelt werden:

    VB.NET-Quellcode

    1. <div class=""resultDep"">(?<resultDep>.*)</div>


    Außerdem steckt der Bahnhof in der Gruppe namens "resultDep": <resultDep>.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Außerdem steckt der Bahnhof in der Gruppe namens "resultDep": <resultDep>.

    Soll mir was sagen? Sry, aber ich bin echt schlecht in sowas :D

    Und trotz erneuertem Pattern gehts net.

    @Lukas:
    btw: Danke dass du nachts um 3:30 nichts anderes zu tun hast als mir bei meinen Drecksproblemen zu helfen <3 :D
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Weil das ganze in einer Gruppe steckt. Die Match-Klasse verfügt über die Groups-Property, welche die Ergebnisse enthält.

    msdn.microsoft.com/en-us/libra…essions.match.groups.aspx
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Und wie finde ich heraus was das für eine Gruppe ist?
    Ich bin verwirrt -.-
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Außerdem steckt der Bahnhof in der Gruppe namens "resultDep": <resultDep>.


    Als Gruppenname kann auch ein String angegeben werden:

    VB.NET-Quellcode

    1. Match.Groups("resultDep").Value


    gibt dir dann den Abfahrtsbahnhof aus.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    VB.NET-Quellcode

    1. Dim w As New Net.WebClient
    2. Dim s As String = w.DownloadString("http://reiseauskunft.bahn.de/bin/query.exe/dn?revia=yes&existOptimizePrice=1&country=DEU&dbkanal_007=L01_S01_D001_KIN0001_qf-bahn_LZ003&S=n%FCrnberg&REQ0JourneyStopsSID=&REQ0JourneyStopsS0A=7&Z=m%FCnchen&REQ0JourneyStopsZID=&REQ0JourneyStopsZ0A=7&trip-type=single&date=Do%2C+05.07.12&time=00%3A05&timesel=depart&returnTimesel=depart&optimize=0&travelProfile=-1&adult-number=1&children-number=0&infant-number=0&tariffTravellerType.1=E&tariffTravellerReductionClass.1=0&tariffTravellerAge.1=&qf-trav-bday-1=&tariffClass=2&start=1&qf.bahn.button.suchen=")
    3. Dim Pattern As String = ("<div class=""resultDep"">(?<resultDep>.*)</div>")
    4. Dim r As Regex = New Regex(Pattern, RegexOptions.IgnoreCase)
    5. Dim match As Match = Regex.Match(s, Pattern, RegexOptions.Multiline)
    6. MsgBox(match.Groups("resultDep").Value)


    kA warums nicht geht, bitte hilf mir *verneig*
    Oh man -.-
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

    VB.NET-Quellcode

    1. Dim w As New Net.WebClient
    2. Dim s As String = w.DownloadString("http://reiseauskunft.bahn.de/bin/query.exe/dn?revia=yes&existOptimizePrice=1&country=DEU&dbkanal_007=L01_S01_D001_KIN0001_qf-bahn_LZ003&S=n%FCrnberg&REQ0JourneyStopsSID=&REQ0JourneyStopsS0A=7&Z=m%FCnchen&REQ0JourneyStopsZID=&REQ0JourneyStopsZ0A=7&trip-type=single&date=Do%2C+05.07.12&time=00%3A05&timesel=depart&returnTimesel=depart&optimize=0&travelProfile=-1&adult-number=1&children-number=0&infant-number=0&tariffTravellerType.1=E&tariffTravellerReductionClass.1=0&tariffTravellerAge.1=&qf-trav-bday-1=&tariffClass=2&start=1&qf.bahn.button.suchen=")
    3. Dim Pattern As String = ("<div class=""resultDep"">(?<resultDep>.*)</div>")
    4. Dim r As Regex = New Regex(Pattern, RegexOptions.IgnoreCase) 'was soll das? wozu wird das hier deklariert?
    5. Dim match As Match = Regex.Match(s, Pattern, RegexOptions.Multiline)
    6. MsgBox(match.Groups("resultDep").Value)


    Das richtige Pattern lautet

    VB.NET-Quellcode

    1. <div class=""resultDep"">\s(?<resultDep>.*)\s</div>

    \s matcht Leerzeichen, aber auch Umbrüche. Die hatte ich vorhin vergessen.

    Für solche Angelegenheiten empfehle ich den RegExr, da kannst du ganz gut testen:
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.