2D Array Zeilen hinzufügen

  • Hallo,

    wieder einmal eine Frage zu Arrays, aber ich habe im Forum leider nicht die passende Antwort gefunden.

    Ich habe eine Eingabemaske mit Inputfeldern. Wenn diese gefüllt werden, prüft das Programm als erstes
    ob in meinem Array bereits Einträge vorhanden sind. Wenn nein, wird ein Eintrag mit Kopfdaten Array[0][1]...Array[0][191] erzeugt.
    Das funktioniert.
    Anschließend werden die Inputfelder ausgelesen und sollen als Zeile 2 Array[1][1] ... Array[1][191] gespeichert werden.
    Gibt der Anwender neue Daten ein und drückt den Button speichern, soll wieder das Array geprüft werden. Bei Inhalt,
    werden die Daten als Zeile 3 gespeichert. (Zweite und dritte Zeile funktionieren nicht.)
    Ganz am Ende des Programms kann durch Drücken eines anderen Buttons ein Textfile mit den Daten des Arrays erzeugt werden.
    Hierfür wollte ich die Funktion von BugFix verwenden : _FileWriteFromArray2D($FILEPATH, $ARRAY, $iROWstart=0, $iROWend=0, $iCOLstart=0, $iCOLend=0, $DELIM=';')

    Jetzt mein Problem:

    Die Kopfzeile wird erzeugt
    Zeile 2 wird auch erzeugt, aber dann ist die Kopfzeile ist weg ....
    Das Schreiben in eine Datei funktioniert auch, wenn etwas im Array drin steht ;(

    Spoiler anzeigen
    [autoit]


    ;Prüfen, ob es bereits Einträge in $Plakate_Array gibt, ansonsten Kopfzeile anlegen
    ;$inhalt_array = _array_groesse($Plakate_Array)
    if $inhalt_array > 0 Then
    msgbox (0,"Inhalt Array ",$inhalt_array)
    else
    msgbox(0,"Inhalt Array" , "<= 0")
    call (_user_variablen($Plakate_Array)) ;Hier werden die Kopfdaten geschrieben
    $zaehler += 1
    EndIf
    ; im Programm gibt der User Daten in ein Input ein, die dem Array zugefügt werden sollen
    $zaehler += 1 ; Indexwert um eins erhöhen, für ersten Eintrag jetzt 0
    msgbox(0,"Zähler", $zaehler)
    If $zaehler < 200 Then ; wenn Index kleiner als 200 ist
    $Plakate_Array[$zaehler][0] = $v_update ; Daten an Indexposition eintragen
    $Plakate_Array[$zaehler][1] = $v_ean
    $Plakate_Array[$zaehler][2] = GUICtrlRead($Standard_user_name)
    $Plakate_Array[$zaehler][3] = $v_vorlname
    $Plakate_Array[$zaehler][4] = GUICtrlRead($Standard_DruckAnz)
    $Plakate_Array[$zaehler][7] = GUICtrlRead($Standard_Text1)
    $Plakate_Array[$zaehler][8] = GUICtrlRead($Standard_Text2)
    $Plakate_Array[$zaehler][9] = GUICtrlRead($Standard_Text3)
    $Plakate_Array[$zaehler][10] = GUICtrlRead($Standard_Text4)
    $Plakate_Array[$zaehler][11] = GUICtrlRead($Standard_Text5)
    $Plakate_Array[$zaehler][35] = GUICtrlRead($Standard_Text6)
    $Plakate_Array[$zaehler][36] = GUICtrlRead($Standard_Text7)
    $Plakate_Array[$zaehler][37] = GUICtrlRead($Standard_Text8)
    $Plakate_Array[$zaehler][59] = GUICtrlRead($Standard_ART15)
    $Plakate_Array[$zaehler][15] = GUICtrlRead($Standard_EURO1)
    $Plakate_Array[$zaehler][19] = GUICtrlRead($Standard_EURO2)
    $Plakate_Array[$zaehler][58] = GUICtrlRead($Standard_ART14)
    $Plakate_Array[$zaehler][56] = GUICtrlRead($Standard_ART12)
    $Plakate_Array[$zaehler][61] = $v_art17
    Else ; sonst Fehlermeldung
    MsgBox(0, 'FEHLER', 'Keine weiteren Einträge möglich! - Array ist voll.')
    EndIf
    _ArrayDisplay( $Plakate_Array, "Gesamtes Array" )
    EndFunc

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

    Ich hoffe es kann mir jemand weiterhelfen.

    VG Anfänger

  • Hi...

    eigentlich solltest du es aber auch mit Bugfixss _Array2DAdd() hinbekommen...

    Spoiler anzeigen
    [autoit]

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;
    ; Function _Array2DAdd(ByRef $avArray, $sValue='')
    ;
    ; Description Redim Array Size and add an Array element at last position
    ; Works with any occurences in 2nd Dimension
    ; Works also with 1D-Array
    ;
    ; Parameter $avArray Given Array
    ; optional $sValue Value of new Element, parts must be seperate with '|'
    ;
    ; Return Succes -1
    ; Failure 0 and set @error
    ; @error = 1 given array is not array
    ; @error = 2 given parts of Element too less/much
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Func _Array2DAdd(ByRef $avArray, $sValue='')
    If ( Not IsArray($avArray) ) Then
    SetError(1)
    Return 0
    EndIf
    Local $UBound2nd = UBound($avArray,2)
    If @error = 2 Then
    ReDim $avArray[UBound($avArray)+1]
    $avArray[UBound($avArray)-1] = $sValue
    Else
    Local $arValue
    ReDim $avArray[UBound($avArray)+1][$UBound2nd]
    If $sValue = '' Then
    For $i = 0 To $UBound2nd-2
    $sValue &= '|'
    Next
    EndIf
    $arValue = StringSplit($sValue, '|')
    If $arValue[0] <> $UBound2nd Then
    SetError(2)
    Return 0
    EndIf
    For $i = 0 To $UBound2nd-1
    $avArray[UBound($avArray)-1][$i] = $arValue[$i+1]
    Next
    EndIf
    Return -1
    EndFunc ;==>_Array2DAdd

    [/autoit]

    Edit: Habe gerade gesehen das es auch nen _array2DInsert gibt...

    Array2DInsert


    MFG chris :D

  • Hallo,

    ich habe meine Variable gefüllt und an die Funktion _Array2ADd übergeben.
    Beim Ausführen der Funktion habe ich mir das Array ausgeben lassen und gesehen, dass alles in 1 Spalte und ca. 60 Zeilen steht.

    Ich möchte aber 1 Zeile mit ca. 60 Spalten einfügen.

    Wo ist der Haken?

    Spoiler anzeigen
    [autoit]


    $Array_value = $v_update & "|" & $v_ean & "|" & _
    GUICtrlRead($Standard_user_name) & "|" & _
    $v_vorlname & "|" & _
    GUICtrlRead($Standard_DruckAnz) & "|" & _
    "|" & "|" & _
    GUICtrlRead($Standard_Text1) & "|" & _
    GUICtrlRead($Standard_Text2) & "|" & _
    GUICtrlRead($Standard_Text3)& "|" & _
    GUICtrlRead($Standard_Text4) & "|" & _
    GUICtrlRead($Standard_Text5) & "|" & _
    "|||" & _
    GUICtrlRead($Standard_EURO1) & "|" & _
    "|||" & _
    GUICtrlRead($Standard_EURO2) & "|" & _
    "|||||" & _
    "|||||" & _
    "|||||" & _
    GUICtrlRead($Standard_Text6) & "|" & _
    GUICtrlRead($Standard_Text7) & "|" & _
    GUICtrlRead($Standard_Text8) & "|" & _
    "|||" & _
    "|||||" & _
    "|||||" & _
    "|||||" & _
    GUICtrlRead($Standard_ART12) & "|" & _
    "|" & _
    GUICtrlRead($Standard_ART14) & "|" & _
    GUICtrlRead($Standard_ART15) & "|" & _
    "|" & _
    $v_art17
    $result = _Array2DAdd($Plakate_Array, $Array_value)

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

    if $result = -1 Then
    msgbox (0,"Erfolgreich","alles gespeichert")
    elseif $result = 1 Then
    msgbox (0,"Error","Array ist kein Array")
    elseif $result = 2 Then
    msgbox (0,"Error","Zu viel oder wenig Elemente")
    Else
    msgbox (0,"Error","anderer Fehler")
    Endif

    [/autoit]