Hallo zusammen,
ich stehe vor einem 2D-Array Problem
Ich finde die Arbeit mit Arrays (für mich persönlich) sehr kompliziert und habe daher in meinem Fall jetzt einige Herausforderungen.
Ich habe folgendes vor:
In meinen Skript hat der Mitarbeiter eine Tabelle (kreiert via ListView). Dort muss er Werte eintragen und mit diesen Werten sollen zwei Dinge passieren. Zum einen sollen diese Werte in eine Ini-Datei geschrieben werden und natürlich beim Neustart des Skriptes auch wieder eingelesen werden. Hier benötige ich ja das erste mal den Array.
Als nächstes sollen bestimmte Felder Werte aus anderen Feldern als Summe errechnen. Hintergrund: Diese Tabelle kommt urpsünglich aus Excel und dort kann ich in den Spalten natürlich problemlos mit Formeln arbeiten und einfach sagen in Spalte A1: =B1-C1... sowas will ich halt auf AutoIt "portieren".
Ich poste mal mein vollständiges Skript mit dem was jetzt bereits steht:
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Date.au3>
#include <GUIListViewEx.au3>
#include <GuiComboBox.au3>
#include <WinAPI.au3>
#include <ColorConstants.au3>
OnAutoItExitRegister("_FontCleanUp")
Global $iCount_Left = 1, $iCount_Right = 1, $vData, $aRet, $iEditMode = 23, $hGui, $iJahr, $iMonat, $ListView, $ahFontEx[1] = [0]
; Create GUI
$hGUI = GUICreate("ForeCast Automation", 1600, 800, -1, -1)
; Create Left ListView
$idLabel = GUICtrlCreateLabel("Datum", 20, 80, 60, 150, 0x202)
_GuiCtrlSetFont(-1, 15, 800, 8, 90)
GUICtrlSetBkColor($idLabel, $COLOR_WHITE)
$cListView = GUICtrlCreateListView("|Forecast werth. Post|Tagesziel|Werth. Postpaid|TK High|TK Mid|TK Low|davon Flex|O2 Go|O2 Go 24m|davon Flex|Blau.de||MIGRATION||Forecast VVL|Tagesziel|VVL|O2 Up|O2 Stable|O2 Down|VVL ohne Migras|Forecast DSL|Tagesziel|DSL|Forecast Punkte|Tagesziel|Punkte", 10, 160, 1580, 630, 0x201)
_GUICtrlListView_SetExtendedListViewStyle($cListView, $LVS_EX_FULLROWSELECT)
_GUICtrlListView_SetColumnWidth($cListView, 0, 80)
_GUICtrlListView_SetColumnWidth($cListView, 1, 40)
_GUICtrlListView_SetColumnWidth($cListView, 2, 40)
_GUICtrlListView_SetColumnWidth($cListView, 3, 55)
_GUICtrlListView_SetColumnWidth($cListView, 4, 55)
_GUICtrlListView_SetColumnWidth($cListView, 5, 55)
_GUICtrlListView_SetColumnWidth($cListView, 6, 55)
_GUICtrlListView_SetInsertMarkColor($cListView, 0)
$hHeader = HWnd(_GUICtrlListView_GetHeader($cListView))
ControlDisable($hHeader,"","")
$idCboJahr = GUICtrlCreateCombo('', 25, 20, 50)
$idCboMonat = GUICtrlCreateCombo('', 100, 20, 80)
$idCboTag = GUICtrlCreateCombo('', 200, 20, 170)
GUICtrlSetState($idCboTag,$GUI_HIDE)
_InitJahr($idCboJahr)
_InitMonat($idCboMonat)
_InitTag($idCboTag)
; Fill ListView with items
$iTage = _DateDaysInMonth($iJahr, $iMonat)
For $i = 1 To $iTage
If _DateToDayOfWeek($iJahr, $iMonat, $i) <> 1 Then _
GUICtrlCreateListViewItem($i & "." & $iMonat & "." & $iJahr & "||", $cListView)
Next
; Create array
$aLV_List_Left = _GUIListViewEx_ReadToArray($cListView, 1) ; Note count element
; Initiate GLVEx - no array passed - count parameter set - default insert mark colour (black) - drag image
$iLV_Left_Index = _GUIListViewEx_Init($cListView, $aLV_List_Left, 1, 0, True)
; All columns editable
_GUIListViewEx_SetEditStatus($iLV_Left_Index, "*")
; Create buttons
$cDisplay_Left_Button = GUICtrlCreateButton("Array anzeigen", 200, 15, 100, 30)
GUISetState()
; Register for editing 7 dragging
_GUIListViewEx_MsgRegister()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $cDisplay_Left_Button
$aLV_List_Left = _GUIListViewEx_ReadToArray($cListView, 1)
If Not @error Then
_ArrayDisplay($aLV_List_Left, "Returned Left")
Else
MsgBox(0, "Left", "Empty Array")
EndIf
Case $idCboJahr, $idCboMonat
$iJahr=GUICtrlRead($idCboJahr)
$iMonat=_GUICtrlComboBox_GetCurSel($idCboMonat)+1
_InitTag($idCboTag)
_GUICtrlListView_DeleteAllItems($cListView)
$iTage = _DateDaysInMonth($iJahr, $iMonat)
For $i = 1 To $iTage
If _DateToDayOfWeek($iJahr, $iMonat, $i) <> 1 Then _
GUICtrlCreateListViewItem($i & "." & $iMonat & "." & $iJahr & "||", $cListView)
Next
EndSwitch
$aRet = _GUIListViewEx_EditOnClick($iEditMode)
; Array only returned AFTER EditOnClick process - so check array exists
If IsArray($aRet) Then
; Uncomment to see returned array
;~ _ArrayDisplay($aRet, @error)
EndIf
WEnd
Func _InitJahr($iID)
For $i = @YEAR - 2 To @YEAR + 5
If $i = @YEAR Then
GUICtrlSetData($iID, $i, $i)
Else
GUICtrlSetData($iID, $i)
EndIf
Next
$iJahr = @YEAR
EndFunc ;==>_InitJahr
Func _InitMonat($iID)
For $i = 1 To 12
$sMon = _DateToMonth($i, 2)
If $i = @MON Then
GUICtrlSetData($iID, $sMon, $sMon)
Else
GUICtrlSetData($iID, $sMon)
EndIf
Next
$iMonat = @MON
EndFunc ;==>_InitMonat
Func _InitTag($iID)
GUICtrlSetData($iID,"","")
$iTage = _DateDaysInMonth($iJahr, $iMonat)
For $i = 1 To $iTage
If _DateToDayOfWeek($iJahr, $iMonat, $i) <> 1 Then _
GUICtrlSetData($iID, $i & '.' & $iMonat & '.' & $iJahr)
Next
EndFunc ;==>_InitTag
Func _GuiCtrlSetFont($controlID, $size, $weight = 400, $attribute = 0, $rotation = 0, $fontname= "", $quality = 2)
Local $fdwItalic = BitAND($attribute, 1)
Local $fdwUnderline = BitAND($attribute, 2)
Local $fdwStrikeOut = BitAND($attribute, 4)
ReDim $ahFontEx[UBound($ahFontEx) + 1]
$ahFontEx[0] += 1
$ahFontEx[$ahFontEx[0]] = _WinAPI_CreateFont($size, 0, $rotation * 10, $rotation, $weight, _
$fdwItalic, $fdwUnderline, $fdwStrikeOut, -1, 0, 0, $quality, 0, $fontname)
GUICtrlSendMsg($controlID, 48, $ahFontEx[$ahFontEx[0]], 1)
EndFunc
Func _FontCleanUp()
For $i = 1 To $ahFontEx[0]
_WinAPI_DeleteObject($ahFontEx[$i])
Next
EndFunc
Alles anzeigen
Kann mir wer weiterhelfen, damit ich das Projekt fortführen kann?
LG
Mirko