Leerfelder aus Array herausfinden und ausgaben ?

  • hi Leute. ich gäng seit ner woche an 1 Problem fest und finde keine lösung , hoffe dies wird sich mit eurer hilfe ändern .

    zu meinem tool . ich Öffne eine txt in der sowas drin steht und das sich alle 8 zeilen wiederholt(zumindest die 1. 3 Kürzel)

    Spoiler anzeigen

    IDK+102514072+99+AOK Bramsche'
    VDT+19970403'
    FKT+04'
    VKG+01+102114819+5++++++00'
    NAM+01+AOK Die Gesundheitskasse+für Niedersachsen'
    ANS+1+49565+Bramsche+Marktstrasse 5'
    ANS+2+49551+Bramsche+1151'
    UNT+000009+00005'
    UNH+00006+KOTR:01:001:KV'
    IDK+102514356+99+AOK Lingen'
    VDT+19970403'
    FKT+04'
    VKG+01+102114819+5++++++00'
    NAM+01+AOK Die Gesundheitskasse+für Niedersachsen'
    ANS+1+49808+Lingen+Bernd-Rosemeyer-Str. 14'
    ANS+2+49803+Lingen+1120'
    UNT+000009+00006'
    UNH+00007+KOTR:01:001:KV'
    IDK+106918228+99+AOK Mittlerer Oberrhein'
    VDT+19970403'
    FKT+04' USW

    mit
    $datei = FileOpen($var, 0)
    for $i=25000 to 0 step -1

    $buchstabe = FileReadline($datei)
    $result = stringLeft ($buchstabe, 3 )
    $array=StringSplit($buchstabe,"+")

    soweit funktionier das auch alles ..

    die verschiedenen Arrays lass ich mir auslesen und in eine andere Datei speichern aus der ich dann eine tabelle mache.
    meine problem ist jetz folgendes

    wenn in der ausgangs txt zb einmal mitten drinne die FKT informationen fehlen .. hab ich ja dann in meiner txt die es speichert einen wert weniger in der spalte und die nachfolgenenden infos rücken dann später nach.
    wie bekomm ich es hin das ich eine leerstelle bekomme.
    ( Momentane code)
    if $result == "FKT" then
    fkt()
    EndIf

    (gebrauchter code)
    if $result == "FKT" then
    fkt()
    EndIf

    if not $result == "FKT" then
    FileWrite($file ," ' ")
    EndIf

    aber dieses if not bla funktioniert natürlich nicht .. da result ja garnicht weiss das "FKT"+XXXXXXX alle 8 zeilen wiederholt wird
    sondern es nur ausliest wenn da da steht .. wie kann ich dem programm jetz sagen das wenn FKT nicht da is mir " ' " in die txt schreibt?

    Danke im vorraus wenn ihr noch mehr infos braucht einfach schreiben ich Ede dann meinen text

    • Offizieller Beitrag

    Leg dir ein 2D-Array an. Die Anzahl der Elemente in der 2.ten Dimension legst du fest anhand der maximalen Feldinformationen. Dazu definierst du aber einen eindeutigen Index für diese Info.
    Bsp.:

    Code
    IDK+102514072+99+AOK Bramsche'
    VDT+19970403'
    FKT+04'
    VKG+01+102114819+5++++++00'
    NAM+01+AOK Die Gesundheitskasse+für Niedersachsen'
    ANS+1+49565+Bramsche+Marktstrasse 5'
    ANS+2+49551+Bramsche+1151'
    UNT+000009+00005'
    UNH+00006+KOTR:01:001:KV'


    Nun sind automatisch die Arrayfelder, für die im Datensatz keine Werte waren, leer.
    Angenommen dieser Datensatz enthält alle überhaupt möglichen Informationen, dann legst du im Vorfeld dein Array fest:
    [ZeilenIndex][0] = IDK
    [ZeilenIndex][1] = VDT
    [ZeilenIndex][2] = FKT
    [ZeilenIndex][3] = VKG
    [ZeilenIndex][4] = NAM
    [ZeilenIndex][5] = ANS+1
    [ZeilenIndex][6] = ANS+2
    [ZeilenIndex][7] = UNT
    [ZeilenIndex][8] = UNH
    Du definierst demnach erstmalig dein Array:

    [autoit]

    Global $arrayOut[1][9]

    [/autoit]


    Das Feld "IDK" scheint hier der Identifier für einen neuen Datensatz zu sein. Du kannst jetzt einfach Zeile für Zeile der Datei lesen (_FileReadToArray nutzen) und dann in einem Select-Case bearbeiten.
    In etwa so:

    [autoit]

    For $i = 1 To $FileArray[0]
    Select
    Case StringLeft($FileArray[$i], 3) == 'IDK'
    If $arrayOut[Ubound($arrayOut)-1][0] <> '' Then ReDim $arrayOut[Ubound($arrayOut)+1][9] ; neue Zeile im Array erstellen
    $arrayOut[Ubound($arrayOut)-1][0] = ; das was du aus der Zeile verwenden möchtest
    Case StringLeft($FileArray[$i], 3) == 'VDT'
    $arrayOut[Ubound($arrayOut)-1][1] = ; das was du aus der Zeile verwenden möchtest
    Case StringLeft($FileArray[$i], 3) == 'FKT'
    $arrayOut[Ubound($arrayOut)-1][2] = ; das was du aus der Zeile verwenden möchtest
    Case StringLeft($FileArray[$i], 3) == 'VKG'
    $arrayOut[Ubound($arrayOut)-1][3] = ; das was du aus der Zeile verwenden möchtest
    Case StringLeft($FileArray[$i], 3) == 'NAM'
    $arrayOut[Ubound($arrayOut)-1][4] = ; das was du aus der Zeile verwenden möchtest
    Case StringLeft($FileArray[$i], 5) == 'ANS+1'
    $arrayOut[Ubound($arrayOut)-1][5] = ; das was du aus der Zeile verwenden möchtest
    Case StringLeft($FileArray[$i], 5) == 'ANS+2'
    $arrayOut[Ubound($arrayOut)-1][6] = ; das was du aus der Zeile verwenden möchtest
    Case StringLeft($FileArray[$i], 3) == 'UNT'
    $arrayOut[Ubound($arrayOut)-1][7] = ; das was du aus der Zeile verwenden möchtest
    Case StringLeft($FileArray[$i], 3) == 'UNH'
    $arrayOut[Ubound($arrayOut)-1][8] = ; das was du aus der Zeile verwenden möchtest
    EndSelect
    Next

    [/autoit]


    Nun sind automatisch die Arrayspalten, für die in der Datei keine Werte standen, leer.

  • danke für die schnelle und ausführliche hilfe .. wenn eine Information fehlt soll die aber nicht Leer bleiben! weil da hab ich ja des selbe problem wie jetz auch .

    angenommen hab die IDK, VDT,FKT,VKG,ASP in einer tabelle würde das so etwa so aussehen
    IK Stelle FIK Status FIK2. ...... Leistungsarten Telefon nummer
    106918228'AOK Mittlerer Oberrhein'19970403''Unverändert'106918251' Vw vom IK der VS zu KTr 'Alle Leistungsarten ' xxxxx/ xxxxxxx

    jetz hab ich aber nur IDK,VDT,FKT ,ASP ohne VKG dann würde das so aussehen
    IK Stelle FIK Status Telefon nummer
    184212516'AOK Rheinland/Hamburg'20040825''Unverändert' xxxxx /XXXXX

    soll aber so sein .. ( die felder werden durch " ' " getrennt)
    184212516'AOK Rheinland/Hamburg'20040825''Unverändert' " ' " " ' " " ' " xxxxx /XXXXX
    das die telefonnummer später auch unter der anderen steht und nicht nach dem unverändert und unter der FIK2

    Einmal editiert, zuletzt von sbsebbo (29. Juli 2011 um 11:36)

    • Offizieller Beitrag

    wenn eine Information fehlt soll die aber nicht Leer bleiben!


    Du kannst ja alternativ die leeren Felder durch Pseudoeinträge ersetzen, z.B. numerischer Wert mit "9999999" (Länge nach Standardeintragslänge bestimmen) und Zeichenfolge mit "ZZZZZZ".
    Einfach das Array durchlaufen und die Leerfelder ersetzen (Abhängigkeit SpaltenIndex - zugeordneter Feldtyp).