Werte aus txt Datenbank auslesen

  • Hi Leute,

    da ich im moment Probleme damit habe bestimmte Werte aus einer Datenbank zu holen wollte ich mal bei euch nachfragen.

    Die Datenbank ist ungefähr so aufgebaut:

    Spoiler anzeigen

    1|16.1.2009|21:14|21.1|20|17|7|0||0|1|||0|4|||
    1|2.10.2009|16:36|4|5|6|7|9|10||11|12|13|14|15|16||
    1|5.10.2009|13:25|4|5|6|7|9|10||11|12|13|14|15|16||
    2|11.12.200|12:01|13|14|15|6|17||119|20|21|22|23|24|25||
    2|15.1.2009|14:16|13|12|11|10|9||7|6|5|4|3|2|Test||
    3|15.2.200|00:13|23|6|7|6.0|2||0|||0|31|126|||
    1|2|3|4|5|6|7|9|10|11|12|13|14||15|16|17|18

    Es sollen aus der Datenbank nur die Werte ausgelesen werden auf die die Nummer zutrifft (1. Zahl). Zb. soll bei zahl 1 nur der Wert nach dem 5. | ausgelesen werden und das aber zu jeder Zeile. Ist das so möglich und wenn ja, wie?

    Ich hoffe mal ihr könnt mir helfen und habt ein Paar Ideen ;)

  • So z.B:

    Spoiler anzeigen
    [autoit]

    Dim $aZeile[7]
    $aZeile[0] = "1|16.1.2009|21:14|21.1|20|17|7|0||0|1|||0|4|||"
    $aZeile[1] = "1|2.10.2009|16:36|4|5|6|7|9|10||11|12|13|14|15|16||"
    $aZeile[2] = "1|5.10.2009|13:25|4|5|6|7|9|10||11|12|13|14|15|16||"
    $aZeile[3] = "2|11.12.200|12:01|13|14|15|6|17||119|20|21|22|23|24|25||"
    $aZeile[4] = "2|15.1.2009|14:16|13|12|11|10|9||7|6|5|4|3|2|Test||"
    $aZeile[5] = "3|15.2.200|00:13|23|6|7|6.0|2||0|||0|31|126|||"
    $aZeile[6] = "1|2|3|4|5|6|7|9|10|11|12|13|14||15|16|17|18"

    [/autoit] [autoit][/autoit] [autoit]

    $RegEx = "^1[\|][\d\.]*[\|][\d\:]*[\|][\d\.]*[\|][\d]*[\|](.*?)[\|](.*?)$"

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To Ubound($aZeile)-1
    $aArr = StringRegExp($aZeile[$i],$RegEx,1)
    If Not @error Then MsgBox(64,"Zeile " & $i,$aArr[0])
    Next

    [/autoit]

    die Werte kannst du vorher z.B. mit _FileReadToArray() aus der Datenbank lesen.

    [EDIT]
    Oder auch so, sieht vielleicht einfacher aus :)

    Spoiler anzeigen
    [autoit]

    Dim $aZeile[7]
    $aZeile[0] = "1|16.1.2009|21:14|21.1|20|17|7|0||0|1|||0|4|||"
    $aZeile[1] = "1|2.10.2009|16:36|4|5|6|7|9|10||11|12|13|14|15|16||"
    $aZeile[2] = "1|5.10.2009|13:25|4|5|6|7|9|10||11|12|13|14|15|16||"
    $aZeile[3] = "2|11.12.200|12:01|13|14|15|6|17||119|20|21|22|23|24|25||"
    $aZeile[4] = "2|15.1.2009|14:16|13|12|11|10|9||7|6|5|4|3|2|Test||"
    $aZeile[5] = "3|15.2.200|00:13|23|6|7|6.0|2||0|||0|31|126|||"
    $aZeile[6] = "1|2|3|4|5|6|7|9|10|11|12|13|14||15|16|17|18"

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To Ubound($aZeile)-1
    $aArr = StringSplit($aZeile[$i],"|")
    If Not @error And $aArr[1] = "1" Then MsgBox(64,"Zeile " & $i,$aArr[6])
    Next

    [/autoit]
  • ja genau, danke. Aber kannst du mir das mit $regEx im 1. erklären? das versteh ich noch nicht ganz. Auch wenn das 2. funzt würde mich das doch interessieren.

  • Ohje :D - na gut - aaalso das ganze ist eine Regular Expression (siehe auch Online Hilfe, oder besser dort:
    http://www.regenechsen.de/phpwcms/index.php?regex_allg)
    also einfach eine Art Suchmuster wie *.exe

    ^1[\|][\d\.]*[\|][\d\:]*[\|][\d\.]*[\|][\d]*[\|](.*?)[\|](.*?)$

    ^ = Zeilenanfang
    1 = die Eins
    [\|] = der senkrechte Strich
    [\d\.]= alle Zahlen und Punkt
    * = in beliebiger Menge
    [\|][\d\:]*[\|][\d\.]*[\|][\d]*[\|] = siehe oben (und das fünf mal)
    (.*?) = einfach Alles und da in Klammern ist es die erste "Gruppe"
    [\|](.*?) = in dem Fall der Rest bis zum
    $ = Zeilenende

    Wobei in dem Fall von StringRegExp($aZeile[$i],$RegEx,1) bei dritten Parameter=1 ein Array an Treffern zurückgegeben wird. Treffer = Gruppe
    Also stehen in $aArr[0] die Werte nach dem fünften | drin.

  • Bitte, oder etwas verkürzt:

    Spoiler anzeigen
    [autoit]

    $RegEx = "^1([\|][\d\.:]*){4}[\|](.*?)[\|](.*?)$"

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To Ubound($aZeile)-1
    $aArr = StringRegExp($aZeile[$i],$RegEx,1)
    If Not @error Then MsgBox(64,"Zeile " & $i,$aArr[1])
    Next

    [/autoit]

    wobei hier:
    ([\|][\d\.:]*){4}
    der Ausdruck in der Klammer viermal wiederholt wird.