Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 21:12

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



StringSplit Array-Variable Problem

Discussion on StringSplit Array-Variable Problem within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jul 2010
Posts: 205
Received Thanks: 31
StringSplit Array-Variable Problem

Tag zusammen, ich bins schon wieder

Folgendes Problem: Aus einer .txt soll aus den Zeilen, die jeweils aus "Text"|"Text"|"Zahl" bestehen, in einer Schleife jede Zeile in ein Array gepackt werden. Aus dem Input von zwei Comboboxen, soll dann zusammen mit den Arrays ein Output erzeugt werden. Je nach Input der Combobox, gibt es in einer If-ElseIf-Schleife 4 mögliche Ausgänge für den Output. Von diesen 4 möglichen Ausgängen funktionieren allerdings nur 2, bei den andren beiden erhalte ich den Error: "Array variable has incorrect number of subscripts or subscript dimension range exceeded." Hierbei handelt es sich bei beiden um das Subscript "$iSplit[2]", die anderen beiden ($iSplit[1] und $iSplit[3]) bereiten keine Probleme.
Hier der Code der Funktion:
PHP Code:
Func Stunden()
   
$StundenFileLoad2 FileOpen ($StundenDB)
   
$StundenUser GUICtrlRead ($ComboUserStunden)
   
$StundenProjekt GUICtrlRead ($ComboProjektStunden)
   If 
$StundenUser "Alle" And $StundenProjekt "Alle" Then
      Local $i 
0
      Local $StundenStunden 
0
      
Do
         
$i += 1
         $iLine 
FileReadLine($StundenFileLoad2$i)
         
$iSplit StringSplit($iLine"|")
         
$StundenStunden $StundenStunden $iSplit[3]
      
Until @Error <> 0
      GUICtrlSetData
($OutputLabel"Insgesamt wurden " $StundenStunden " Stunden gearbeitet")
   ElseIf 
$StundenUser <> "Alle" And $StundenProjekt "Alle" Then
      Local $i 
0
      Local $StundenStunden 
0
      
Do
         
$i += 1
         $iLine 
FileReadLine($StundenFileLoad2$i)
         
$iSplit StringSplit($iLine"|")
         If 
$iSplit[1] = $StundenUser Then
            $StundenStunden 
$StundenStunden $iSplit[3]
         EndIf
      
Until @Error <> 0
      GUICtrlSetData
($OutputLabel"Benutzer " $StundenUser " hat insgesamt " $StundenStunden " Stunden gearbeitet.")
   ElseIf 
$StundenUser "Alle" And $StundenProjekt <> "Alle" Then
      Local $i 
0
      Local $StundenStunden 
0
      
Do
         
$i += 1
         $iLine 
FileReadLine($StundenFileLoad2$i)
         
$iSplit StringSplit($iLine"|")
         If 
$iSplit[2] = $StundenProjekt Then
            $StundenStunden 
$StundenStunden $iSplit[3]
         EndIf
      
Until @Error <> 0
      GUICtrlSetData
($OutputLabel"Für Projekt " $StundenProjekt " wurden insgesamt " $StundenStunden " Stunden gearbeitet.")
      Else
      
Local $i 0
      Local $StundenStunden 
0
      
Do
         
$i += 1
         $iLine 
FileReadLine($StundenFileLoad2$i)
         
$iSplit StringSplit($iLine"|")
         If 
$iSplit[1] = $StundenUser And $iSplit[2] = $StundenProjekt Then
            $StundenStunden 
$StundenStunden $iSplit[3]
         EndIf
      
Until @Error <> 0
      GUICtrlSetData
($OutputLabel"Benutzer " $StundenUser " hat " $StundenStunden "Stunden an Projekt " $StundenProjekt " gearbeitet.")
   EndIf
FileClose ($StundenFileLoad2)
EndFunc 
Die Errors erhalte ich wie schon erwähnt in 2 "If-Ausgängen" und zwar bei:
PHP Code:
ElseIf $StundenUser "Alle" And $StundenProjekt <> "Alle" Then 
in der Zeile:
PHP Code:
If $iSplit[2] = $StundenProjekt Then 
Und
PHP Code:
Else 
in der Zeile
PHP Code:
If $iSplit[1] = $StundenUser And $iSplit[2] = $StundenProjekt Then 
Wie auch schon oben beschrieben beschwert er sich über "$iSplit[2]"
Danke schonmal im Vorraus

Mit freundlichem Gruß
Meredy123

€: Habs selbst gefixt, einfach statt
PHP Code:
Until @Error <> 
PHP Code:
Until $i $StundenLines 
(natürlich vorher für $StundenLines die Anzeahl der Zeilen rausgesucht) eingesetzt. Hat wohl dann noch nen zweiten Durchlauf gestartet und da natürlich nix gefunden und nur was in das erste Subscript gepackt
Meredy123 is offline  
Old 04/02/2014, 16:20   #2
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Du accest die Sachen direkt, aber was ist wenn die Lines nicht da sind? Prüf mit UBound nach ob das Array wirklich so groß ist.
alpines is offline  
Old 04/02/2014, 16:40   #3
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
deine methode die datei auszulesen ist extrem ineffektiv...

mal von der unsinnigen variablen bennenung abgesehen (bei einer textdatei kann es sich selbstverständlich nicht um eine datenbank handeln), wäre es mal interesannt zu wissen, wie deine textdatei denn aufgebaut ist.

sollte sie auch nur halbwegs strukturiert aufgebaut sein, so kannst du den inhalt mit einem regulären ausdruck einlesen und direkt parsen.

der erforderliche code würde sich so auf etwa 5-9 zeilen beschränken.
lolkop is offline  
Old 04/02/2014, 16:48   #4
 
elite*gold: 0
Join Date: Jul 2010
Posts: 205
Received Thanks: 31
Das mein Code nicht unbedingt der effektivste ist, hab ich mir schon gedacht.
Die Datenbank (oder von mir aus auch .txt-Datei die Daten enthält) ist wie ich Anfangs beschrieben habe so aufgebaut "Text"|"Text"|"Zahl" (bzw. User|Projekt|Arbeitsstunden). Das Programm beschränkt sich nicht nur auf die oben beschrieben Funktion und so wird bei einer anderen Funktion, bei der eine Eingabe getätigt wird, bei der eben die User und die Stundenzahlen der Projekte zusammengefügt werden, jeweils eine neue Zeile mit genau der Eingabe (User|Projekt|Arbeitsstunden) gemacht welche ich dann mit oben genannter Funktion auslese und zu verschiedenen Ausgaben zusammenfüge.

€: Kann auch den kompletten Code posten, wenn du unbedingt Lust hast dir 500 Zeilen zusammengeflickten Code anzusehen
Meredy123 is offline  
Old 04/02/2014, 17:15   #5
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Quote:
Originally Posted by Meredy123 View Post
€: Kann auch den kompletten Code posten, wenn du unbedingt Lust hast dir 500 Zeilen zusammengeflickten Code anzusehen
wtf ?!

lolkop ich denke stringsplit ist da schon optimal
YatoDev is offline  
Old 04/02/2014, 18:08   #6
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
hier mal ein beispiel, wie ich es machen würde (natürlich ohne zu wissen, wie dein code aussieht):
Code:
Global $StundenDB = "test.txt", $content=getContent()
GUICreate('Gui', 300, 100, Default, Default, 0x10C80000)
$ComboUserStunden = GUICtrlCreateCombo('Alle', 10, 10, 140, 20)
$ComboProjektStunden = GUICtrlCreateCombo('Alle', 150, 10, 140, 20)
For $i=0 To UBound($content)-1 Step 3
	GUICtrlSetData($ComboUserStunden, $content[$i])
	GUICtrlSetData($ComboProjektStunden, $content[$i+1])
Next
$OutputLabel = GUICtrlCreateLabel('', 10, 40, 280, 20)
$GO = GUICtrlCreateButton('Go', 10, 70, 280, 20)

While True
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $GO
			Stunden()
	EndSwitch
WEnd

Func Stunden()
	Local $stunden=0, $user = GUICtrlRead($ComboUserStunden), $project = GUICtrlRead($ComboProjektStunden), $array = getContent()
	For $i=0 To UBound($array)-1 Step 3
		If ($user="Alle" And $project="Alle") Or ($project="Alle" And $user=$array[$i]) Or ($user="Alle" And $project=$array[$i+1]) Or ($user=$array[$i] And $project=$array[$i+1]) Then $stunden+=$array[$i+2]
	Next
	GUICtrlSetData($OutputLabel, ($user="Alle"?"Es wurden ":"Benutzer "&$user&" hat ") & $stunden & " Stunden" & ($project<>"Alle"?" an Projekt "&$project:"") & " gearbeitet.")
EndFunc

Func getContent()
	Return StringRegExp(FileRead($StundenDB), "(.+?)\|(.+?)\|(.+)", 3)
EndFunc
lolkop is offline  
Thanks
1 User
Old 04/02/2014, 19:30   #7
 
elite*gold: 0
Join Date: Jul 2010
Posts: 205
Received Thanks: 31
Wäre es möglich, dass du den Code ein wenig kommentierst? Blicke nicht so direkt durch.

Achja hier mal der Code:
PHP Code:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <ComboConstants.au3>
#include <GuiListView.au3>
#include <StaticConstants.au3>

Global $ProjektDB = @scriptdir "\projektdb.txt" ;Datenbank und Variablen
Global $UserDB = @scriptdir "\userdb.txt"
Global $ProjektUserDB = @scriptdir "\projektuserdb.txt"
Global $AllDB = @scriptdir "\alldb.txt"
Global $StundenDB = @scriptdir "\stundendb.txt"
Global $nProjekt 0
Global $nUser 0
Global $aAdd 0
Global $cItem 0
Global $dItem 0
Global $eItem 0
Global $fItem 0
Global $UserFileLoad 0
Global $u = -1
Global $StundenStunden 0

#Region ### START Koda GUI section ### Form=C:\Users\Maurice\Documents\Projektdatenbank\GUIMain.kxf  ;MainGUI
$GUIMain GUICreate("Projektdatenbank"840438192124)
$ProjektList GUICtrlCreateListView("Projekt|Benutzer|Stunden|Stunden seit letzter Abrechnung"840820321) ;Listview
Global $nLVHandle GUICtrlGetHandle($ProjektList) ;Listview-Handle
_GUICtrlListView_SetColumn
($nLVHandle0"Projekt"1500) ;1.Spalte
_GUICtrlListView_SetColumn
($nLVHandle1"Benutzer"4000) ;2.Spalte
_GUICtrlListView_SetColumn
($nLVHandle2"Stunden"700) ;3.Spalte
_GUICtrlListView_SetColumn
($nLVHandle3"Stunden seit letzter Abrechnung"1950) ;4. Spalte

Global $bNew GUICtrlCreateButton("Neues Projekt"2437610733)
GUICtrlSetCursor (-10)
Global 
$bUserNew GUICtrlCreateButton("Neuer Benutzer"16037610733)
GUICtrlSetCursor (-10)
Global 
$bAdd GUICtrlCreateButton("Benutzer hinzufügen"29637610733)
GUICtrlSetCursor (-10)
Global 
$bWork GUICtrlCreateButton("Leistung hinzufügen"43237610733)
GUICtrlSetCursor (-10)
Global 
$bReset GUICtrlCreateButton("Stunden Reset"57037610733)
GUICtrlSetCursor (-10)
Global 
$bStunden GUICtrlCreateButton("Stundenauflistung"71037610733)
GUICtrlSetCursor (-10)
#EndRegion ### END Koda GUI section ###

#Region ### START Koda GUI section ### Form= ;Neues Projekt GUI
Global $GUINew GUICreate("Neues Projekt anlegen"25595, -1, -1)
Global 
$ButtonOkNew GUICtrlCreateButton("&OK"30647525)
Global 
$ButtonCancelNew GUICtrlCreateButton("Abbrechen"143647525)
Global 
$LabelNew GUICtrlCreateLabel("Projektname"84109280)
GUICtrlSetFont(-1154000"MS Sans Serif")
Global 
$InputNew GUICtrlCreateInput(""83223321)
#EndRegion ### END Koda GUI section ###

#Region ### START Koda GUI section ### Form= ;Neuer Benutzer GUI
Global $GUIUserNew GUICreate("Neuen Benutzer anlegen"25595, -1, -1)
Global 
$ButtonOkUserNew GUICtrlCreateButton("&OK"30647525)
Global 
$ButtonCancelUserNew GUICtrlCreateButton("Abbrechen"143647525)
Global 
$LabelUserNew GUICtrlCreateLabel("Benutzername"84109280)
GUICtrlSetFont(-1154000"MS Sans Serif")
Global 
$InputUserNew GUICtrlCreateInput(""83223321)
#EndRegion ### END Koda GUI section ###

#Region ### START Koda GUI section ### Form= ;Benutzer hinzufügen GUI
$GUIAdd GUICreate("Benutzer zu Projekt hinzufügen"380131302218)
$ComboProjektAdd GUICtrlCreateCombo(""324814525BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$LabelProjektAdd GUICtrlCreateLabel("Projekt"32166128)
GUICtrlSetFont(-1154000"MS Sans Serif")
$LabelUserAdd GUICtrlCreateLabel("Benutzer"224167928)
GUICtrlSetFont(-1154000"MS Sans Serif")
$ButtonOkAdd GUICtrlCreateButton("OK"80887525)
$ButtonCancelAdd GUICtrlCreateButton("Abbrechen"232887525)
$ComboUserAdd GUICtrlCreateCombo(""2164814525BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
#EndRegion ### END Koda GUI section ###

#Region ### START Koda GUI section ### Form= ;Leistung hinzufügen GUI
$GUIWork GUICreate("Leistung zu Projekt hinzufügen"585143302218)
$ComboProjektWork GUICtrlCreateCombo(""324814525BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$LabelProjektWork GUICtrlCreateLabel("Projekt"32166128)
GUICtrlSetFont(-1154000"MS Sans Serif")
$LabelUserWork GUICtrlCreateLabel("Benutzer"224167928)
GUICtrlSetFont(-1154000"MS Sans Serif")
$ButtonOkWork GUICtrlCreateButton("OK"200887525)
$ButtonCancelWork GUICtrlCreateButton("Abbrechen"304887525)
$ComboUserWork GUICtrlCreateCombo(""2164814525BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$InputWork GUICtrlCreateInput(""4084812121)
$LabelStundenWork GUICtrlCreateLabel("Arbeitsstunden"4081613028)
GUICtrlSetFont(-1154000"MS Sans Serif")
#EndRegion ### END Koda GUI section ###

#Region ### START Koda GUI section ### Form= ;Hinweis GUI
$HinweisNew GUICreate("Hinweis"21990321218)
$LabelHinweisNew GUICtrlCreateLabel("Projekt wurde erfolgreich erstellt"161619320)
GUICtrlSetFont(-1104000"MS Sans Serif")
$ButtonHinweisNew GUICtrlCreateButton("Ok"72487525)
#EndRegion ### END Koda GUI section ###

#Region ### START Koda GUI section ### Form= ;Hinweis GUI
$HinweisUserNew GUICreate("Hinweis"21990321218)
$LabelHinweisUserNew GUICtrlCreateLabel("Benutzer wurde erfolgreich erstellt"161619320)
GUICtrlSetFont(-1104000"MS Sans Serif")
$ButtonHinweisUserNew GUICtrlCreateButton("Ok"72487525)
#EndRegion ### END Koda GUI section ###

#Region ### START Koda GUI section ### Form= ;Hinweis GUI
$HinweisAdd GUICreate("Hinweis"21990321218)
$LabelHinweisAdd GUICtrlCreateLabel("Benutzer wurde erfolgreich hinzugefügt"161624020)
GUICtrlSetFont(-1104000"MS Sans Serif")
$ButtonHinweisAdd GUICtrlCreateButton("Ok"72487525)
#EndRegion ### END Koda GUI section ###

#Region ### START Koda GUI section ### Form= ;Hinweis GUI
$HinweisWork GUICreate("Hinweis"21990321218)
$LabelHinweisWork GUICtrlCreateLabel("Leistung wurde erfolgreich hinzugefügt"161624020)
GUICtrlSetFont(-1104000"MS Sans Serif")
$ButtonHinweisWork GUICtrlCreateButton("Ok"72487525)
#EndRegion ### END Koda GUI section ###

#Region ### START Koda GUI section ### Form= ;Error GUI
$ErrorForm GUICreate("ErrorForm"276125192124)
$bError GUICtrlCreateButton("OK"96807525)
$eLabel1 GUICtrlCreateLabel("Leistung hinzufügen fehlgeschlagen. Benutzer"01627320)
GUICtrlSetFont(-1104000"MS Sans Serif")
$eLabel2 GUICtrlCreateLabel("ist nicht Mitglied des Projektes."404818620)
GUICtrlSetFont(-1104000"MS Sans Serif")
#EndRegion ### END Koda GUI section ###

#Region ### START Koda GUI section ### Form= ;Stundenauflistung GUI
$GUIStunden GUICreate("Stundenauflistung"402195192124)
$ComboUserStunden GUICtrlCreateCombo(""242414525BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$ComboProjektStunden GUICtrlCreateCombo(""2322414525BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$OutputLabel GUICtrlCreateLabel(""246435668)
GUICtrlSetFont(-1104000"MS Sans Serif")
$bStundenBerechnen GUICtrlCreateButton("Arbeitsstunden anzeigen"3214413925)
$bStundenAbbrechen GUICtrlCreateButton("Abbrechen"23214413925)
#EndRegion ### END Koda GUI section ###

_GUICtrlListView_RegisterSortCallBack ($ProjektList) ;ListView Sortierungsvorraussetzung

GUISetState 
(@SW_SHOW$GUIMain) ;Main GUI anzeigen



If FileExists ($AllDBThen AllLoad() ;DatenBank ins Listview laden

While 1
    $nMsg 
GUIGetMsg(1)
    Switch 
$nMsg [0]
    Case 
$ProjektList ;sortieren
       _GUICtrlListView_SortItems 
($nLVHandleGUICtrlGetState($ProjektList))
    Case 
$bNew ;neues Projekt anlegen
       WinSetTitle 
($GUINew"""Neues Projekt")
       
GUISetState (@SW_SHOW$GUINew)
       
GUISetState (@SW_HIDE$GUIMain)
    Case 
$bUserNew ;neuer Benutzer
       WinSetTitle 
($GUIUserNew"""Neuer Benutzer")
       
GUISetState (@SW_Show$GUIUserNew)
       
GUISetState (@SW_HIDE$GUIMain)
    Case 
$bAdd ;Benutzer einem Projekt hinzufügen
       WinSetTitle 
($GUIAdd"""Benutzer hinzufügen")
       
GUISetState (@SW_SHOW$GUIAdd)
       
GUISetState (@SW_HIDE$GUIMain)
       
GUICtrlSetData($ComboProjektAdd"")
       
$ProjektFileLoad FileOpen($ProjektDB) ;Projekte aus ProjektDB in Combobox laden
       Local $sAdd  
""$i 0
       
Do
         
$i += 1
         $sAdd 
&= FileReadLine($ProjektFileLoad$i) & "|"
       
Until @Error <> 0
       GUICtrlSetData
($ComboProjektAdd$sAdd)
       
FileClose($ProjektFileLoad)
       
GUICtrlSetData($ComboUserAdd"")
       
$UserFileLoad FileOpen($UserDB) ;User aus UserDB in Combobox laden
       Local $tAdd  
""$i 0
       
Do
         
$i += 1
         $tAdd 
&= FileReadLine($UserFileLoad$i) & "|"
       
Until @Error <> 0
       GUICtrlSetData
($ComboUserAdd$tAdd)
       
FileClose($UserFileLoad)
    Case 
$bWork ;Leistung hinzufügen
       WinSetTitle 
($GUIWork"""Leistung hinzufügen")
       
GUISetState (@SW_SHOW$GUIWork)
       
GUISetState (@SW_HIDE$GUIMain)
       
GUICtrlSetData($ComboProjektWork"")
       
$ProjektFileLoad2 FileOpen($ProjektDB) ;Projekte aus ProjektDB in Combobox laden
       Local $uAdd  
""$i 0
       
Do
         
$i += 1
         $uAdd 
&= FileReadLine($ProjektFileLoad2$i) & "|"
       
Until @Error <> 0
       GUICtrlSetData
($ComboProjektWork$uAdd)
       
FileClose($ProjektFileLoad2)
       
GUICtrlSetData($ComboUserWork"")
       
$UserFileLoad2 FileOpen($UserDB) ;User aus UserDB in Combobox laden
       Local $vAdd  
""$i 0
       
Do
         
$i += 1
         $vAdd 
&= FileReadLine($UserFileLoad2$i) & "|"
       
Until @Error <> 0
       GUICtrlSetData
($ComboUserWork$vAdd)
       
FileClose($UserFileLoad2)
    Case 
$bReset
       Reset
()
    Case 
$ButtonOkNew ;Neues Projekt Button Funktionsstart
       NeuesProjekt
()
    Case 
$ButtonOkUserNew ;Neues Benutzer Button Funktionsstart
       NeuerUser
()
    Case 
$ButtonOkAdd ;Benutzer hinzufügen Button Funktionsstart
       UserAdd
()
    Case 
$ButtonOkWork ;Arbeit hinzufügen Button Funktionsstart
       WorkAdd
()
    Case 
$bError ;Errorhinweis wahrgenommen
       GUISetState 
(@SW_HIDE$ErrorForm)
       
GUISetState (@SW_SHOW$GUIWork)
       
WinActivate ($GUIWork)
    Case 
$bStunden ;Stundenauflistung
       WinSetTitle 
($GUIStunden"""Stundenauflistung")
       
GUISetState (@SW_HIDE$GUIMain)
       
GUISetState (@SW_SHOW$GUIStunden)
       
WinActivate ($GUIStunden)
       
GUICtrlSetData($ComboProjektStunden"")
       
$ProjektFileLoad3 FileOpen($ProjektDB) ;Projekte aus ProjektDB in Combobox laden
       Local $wAdd  
""$i 0
       
Do
         
$i += 1
         $wAdd 
&= FileReadLine($ProjektFileLoad3$i) & "|"
       
Until @Error <> 0
       GUICtrlSetData
($ComboProjektStunden"Alle" "|" $wAdd)
       
FileClose($ProjektFileLoad3)
       
GUICtrlSetData($ComboUserStunden"")
       
$UserFileLoad3 FileOpen($UserDB) ;User aus UserDB in Combobox laden
       Local $xAdd  
""$i 0
       
Do
         
$i += 1
         $xAdd 
&= FileReadLine($UserFileLoad3$i) & "|"
       
Until @Error <> 0
       GUICtrlSetData
($ComboUserStunden"Alle" "|" $xAdd)
       
FileClose($UserFileLoad3)
    Case 
$bStundenBerechnen
       Stunden
()
    Case 
$GUI_EVENT_CLOSE$ButtonCancelNew$ButtonCancelUserNew$ButtonCancelAdd$ButtonCancelWork$ButtonHinweisNew$ButtonHinweisUserNew$ButtonHinweisAdd$ButtonHinweisWork$bStundenAbbrechen  ;Schließen
       
Switch $nMSG[1]
          Case 
$GUIMain
             
If MSGBox(32+4"Beenden""Wollen sie das Programm wirklich beenden?") = 6 Then End()
          Case 
$GUINew
             GUISetState 
(@SW_HIDE$GUINew)
             
GUISetState (@SW_SHOW$GUIMain)
             
WinActivate ($GUIMain)
          Case 
$GUIUserNew
             GUISetState 
(@SW_HIDE$GUIUserNew)
             
GUISetState (@SW_SHOW$GUIMain)
             
WinActivate ($GUIMain)
          Case 
$GUIAdd
             GUISetState 
(@SW_HIDE$GUIAdd)
             
GUISetState (@SW_SHOW$GUIMain)
             
WinActivate ($GUIMain)
          Case 
$GUIWork
             GUISetState 
(@SW_HIDE$GUIWork)
             
GUISetState (@SW_SHOW$GUIMain)
             
WinActivate ($GUIMain)
          Case 
$HinweisNew
             GUISetState 
(@SW_HIDE$HinweisNew)
             
GUISetState (@SW_SHOW$GUINew)
             
WinActivate ($GUINew)
          Case 
$HinweisUserNew
             GUISetState 
(@SW_HIDE$HinweisUserNew)
             
GUISetState (@SW_SHOW$GUIUserNew)
             
WinActivate ($GUIUserNew)
          Case 
$HinweisAdd
             GUISetState 
(@SW_HIDE$HinweisAdd)
             
GUISetState (@SW_SHOW$GUIAdd)
             
WinActivate ($GUIAdd)
          Case 
$HinweisWork
             GUISetState 
(@SW_HIDE$HinweisWork)
             
GUISetState (@SW_SHOW$GUIWork)
             
WinActivate ($GUIWork)
          Case 
$GUIStunden
             GUISetState 
(@SW_HIDE$GUIStunden)
             
GUISetState (@SW_SHOW$GUIMain)
             
WinActivate ($GUIMain)
       EndSwitch
    EndSwitch
WEnd

Func NeuesProjekt
() ;Funktion Neues Projekt
   $nProjekt 
GUICtrlRead ($InputNew)
   
GUISetState (@SW_HIDE$GUINew)
   
GUISetState (@SW_SHOW$HinweisNew)
   
GUICtrlSetData ($InputNew"")
   
ProjektSave()
   
EndFunc

Func NeuerUser
() ;Funktion Neuer Benutzer
   $nUser 
GUICtrlRead ($InputUserNew)
   
GUISetState (@SW_HIDE$GUIUserNew)
   
GUISetState (@SW_SHOW$HinweisUserNew)
   
GUICtrlSetData ($InputUserNew"")
   
UserSave()
   
EndFunc

Func UserAdd
() ;Funktion Benutzer hinzufügen
   $aProjekt 
GUICtrlRead ($ComboProjektAdd)
   
$aUser GUICtrlRead ($ComboUserAdd)
   
$aAdd $aProjekt "|" $aUser
   GUISetState 
(@SW_HIDE$GUIAdd)
   
GUISetState (@SW_SHOW$HinweisAdd)
   
AddSave()
EndFunc

Func WorkAdd
() ;Funktion Leistung hinzufügen
   $wProjekt 
GUICtrlRead ($ComboProjektWork)
   
$wUser GUICtrlRead ($ComboUserWork)
   
$wStunden GUICtrlRead ($InputWork)
   
$ProjektUserFileLoad FileOpen($ProjektUserDB) ;Test ob User Projekt zugewiesen wurde
       Local $i 
0
       Local $o 
0
       
Do
         
$i += 1
         $iLine 
FileReadLine($ProjektUserFileLoad$i)
         If 
$iLine $wProjekt "|" $wUser Then
            $o 
1
         
EndIf
      
Until @Error <> 0
       
If $o=1 Then ;Wenn zu gewiesendann
       FileClose
($UserFileLoad2) ;in StundenDB schreiben
       $StundenFileLoad 
FileOpen($StundenDB1)
       
FileWriteLine($StundenFileLoad$wUser "|" $wProjekt "|" $wStunden)
       
FileClose($StundenFileLoad)
          
Local $j = -1
          Local $k 
0
          $ItemCount 
_GUICtrlListView_GetItemCount($nLVHandle)
          Do ;
Schleife zum Testen ob Projekt/User im Projekt exisitiert
             $j 
+= 1
             $Itemtext 
_GUICtrlListView_GetItemText ($nLVHandle$j0)
             
$Itemtext2 _GUICtrlListView_GetItemText ($nLVHandle$j1)
             
$Itemtext3 _GUICtrlListView_GetItemText ($nLVHandle ,$j2)
             If 
$Itemtext $wProjekt And StringInStr($Itemtext2$wUser)  <> 0 Then ;Wenn Projekt und User im Projekt schon existierendann
                _GUICtrlListView_SetItemText 
($nLVHandle$j$Itemtext3 $wStunden2)
                
_GUICtrlListView_SetItemText ($nLVHandle$j$Itemtext3 $wStunden3)
                
$k 1
             
ElseIf $ItemText $wProjekt And StringInStr($Itemtext2$wUser)  = 0 Then ;Wenn nur Projekt existiertdann
                _GUICtrlListView_SetItemText 
($nLVHandle$j$Itemtext2 ", " $wUser1)
                
_GUICtrlListView_SetItemText ($nLVHandle$j$Itemtext3 $wStunden2)
                
_GUICtrlListView_SetItemText ($nLVHandle$j$Itemtext3 $wStunden3)
                
$k 1
             
EndIf
          
Until $j $Itemcount
          
If $k 0 Then ;Wenn weder nochdann neuer Eintrag
             _GUICtrlListView_AddItem 
($nLVHandle""$ItemCount)
             
_GUICtrlListView_SetItemText ($nLVHandle$ItemCount$wProjekt0)
             
_GUICtrlListView_SetItemText ($nLVHandle$ItemCount$wUser1)
             
_GUICtrlListView_SetItemText ($nLVHandle$ItemCount$wStunden2)
             
_GUICtrlListView_SetItemText ($nLVHandle$ItemCount$wStunden3)
          EndIf
          
GUISetState (@SW_HIDE$GUIWork)
          
GUISetState (@SW_SHOW$HinweisWork)
       Else
          
GUISetState (@SW_HIDE$GUIWork)
          
GUISetState (@SW_SHOW$ErrorForm)
       EndIf
   
WorkSave()
EndFunc

Func ProjektSave
() ;Funktion Projekte speichern
   $ProjektFile 
FileOpen ($ProjektDB1)
   
FileWriteLine ($ProjektFile$nProjekt)
   
FileClose ($ProjektFile)
EndFunc

Func UserSave
() ;Funktion Benutzer speichern
   $UserFile 
FileOpen ($UserDB1)
   
FileWriteLine ($Userfile$nUser)
   
FileClose ($UserFile)
EndFunc

Func AddSave
() ;Funktion ProjekteBenutzer speichern
    $AddFile 
FileOpen ($ProjektUserDB1)
    
FileWriteLine ($AddFile$aAdd)
    
FileClose ($AddFile)
 
EndFunc

Func WorkSave
() ;Funktion Leistung speichern
   Local $iCount 
_GUICtrlListView_GetItemCount($nLVHandle) - 1
   Local $WorkFile 
FileOpen ($AllDB2)
   For $
1=0 To $iCount
      $sItem 
_GUICtrlListView_GetItemTextString ($nLVHandle, $1)
      
FileWriteLine($WorkFile$sItem)
   
Next
   FileClose
($WorkFile)
EndFunc

Func AllLoad
() ;Funktion Datenbank ins Listview laden
   Local $WorkFileLoad 
FileOpen ($AllDB0)
   
_GUICtrlListView_BeginUpdate($nLVHandle)
   While 
True
      $bItem 
FileReadLine ($WorkFileLoad)
      If @
error Then ExitLoop
      GUICtrlCreateListViewItem 
($bItem$ProjektList)
   
WEnd
   _GUICtrlListView_EndUpdate
($nLVHandle)
   
FileClose ($WorkFileLoad)
EndFunc

Func Reset
() ;Stundenzahl zurücksetzen
   $u 
_GUICtrlListView_GetSelectionMark  ($nLVHandle)
   
_GUICtrlListView_SetItemText ($nLVHandle$u03)
EndFunc

Func Stunden
() ;Stundendetails auflisten
   $StundenFileLoad2 
FileOpen ($StundenDB)
   
$StundenLines _FileCountLines ($StundenDB)
   
$StundenUser GUICtrlRead ($ComboUserStunden)
   
$StundenProjekt GUICtrlRead ($ComboProjektStunden)
   If 
$StundenUser "Alle" And $StundenProjekt "Alle" Then ;Wenn Alle User Alle Projekte ausgewählt wurdendann (Stunden insg.)
      
Local $i 0
      Local $StundenStunden 
0
      
Do
         
$i += 1
         $iLine 
FileReadLine($StundenFileLoad2$i)
         
$iSplit StringSplit($iLine"|")
         
$StundenStunden $StundenStunden $iSplit[3]
      
Until $i $StundenLines
      GUICtrlSetData
($OutputLabel"Insgesamt wurden " $StundenStunden " Stunden gearbeitet")
   ElseIf 
$StundenUser <> "Alle" And $StundenProjekt "Alle" Then ;Wenn Alle Projekte eines Users ausgewählt wurdendann (Stunden eines Users insg.)
      
Local $i 0
      Local $StundenStunden 
0
      
Do
         
$i += 1
         $iLine 
FileReadLine($StundenFileLoad2$i)
         
$iSplit StringSplit($iLine"|")
         If 
$iSplit[1] = $StundenUser Then
            $StundenStunden 
$StundenStunden $iSplit[3]
         EndIf
      
Until $i $StundenLines
      GUICtrlSetData
($OutputLabel"Benutzer " $StundenUser " hat insgesamt " $StundenStunden " Stunden gearbeitet.")
   ElseIf 
$StundenUser "Alle" And $StundenProjekt <> "Alle" Then ;Wenn alle User eines Projektes ausgewählt wurdendann (Stunden eines Projektes insg.)
      
Local $i 0
      Local $StundenStunden 
0
      
Do
         
$i += 1
         $iLine 
FileReadLine($StundenFileLoad2$i)
         
$iSplit StringSplit($iLine"|")
         If 
$iSplit[2] = $StundenProjekt Then
            $StundenStunden 
$StundenStunden $iSplit[3]
         EndIf
      
Until $i $StundenLines
      GUICtrlSetData
($OutputLabel"Für Projekt " $StundenProjekt " wurden insgesamt " $StundenStunden " Stunden gearbeitet.")
      Else ;
Wenn ein spezifischer User und ein spezifisches Projekt ausgewählt wurdendann (Stunden eines Users an einem Projekt)
      
Local $i 0
      Local $StundenStunden 
0
      
Do
         
$i += 1
         $iLine 
FileReadLine($StundenFileLoad2$i)
         
$iSplit StringSplit($iLine"|")
         If 
$iSplit[1] = $StundenUser And $iSplit[2] = $StundenProjekt Then
            $StundenStunden 
$StundenStunden $iSplit[3]
         EndIf
      
Until $i $StundenLines
      GUICtrlSetData
($OutputLabel"Benutzer " $StundenUser " hat " $StundenStunden " Stunden an Projekt " $StundenProjekt " gearbeitet.")
   EndIf
   
FileClose($StundenFileLoad2)
EndFunc

Func End
() ;Schließen
   WorkSave
()
   
_GUICtrlListView_UnRegisterSortCallBack ($nLVHandle)
   Exit
EndFunc 
Laufen tut auf jeden fall mal alles. Bissjen schlanker könnte es aber ruhig sein
Hab zur Übersichtlichkeit die.au3 Datei mal angehangen, ist auch kommentiert
Attached Files
File Type: rar Projektdatenbank (1).rar (3.8 KB, 0 views)
Meredy123 is offline  
Old 04/02/2014, 20:43   #8
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by Meredy123 View Post
Wäre es möglich, dass du den Code ein wenig kommentierst? Blicke nicht so direkt durch.
da der code doch recht übersichtlich ist, sollte eigentlich klar sein, wie sich das ganze zusammenstellt.

die datei wird wie angegeben eingelesen und durch einen regulären ausdruck geparst. im anschluss werden in einer for-schleife die stunden zusammen gezählt (addiert werden nur stunden die eines der kriterien erfüllen).
im anschluss wird dann je nach ausgangslage der combo boxen der zusammengesetzte string im label ausgegeben.

Edit:
ich weis nicht, wieso du in deinem projekt ständig den begriff datenbank verwendest, wo du doch garkeine datenbank nutzt...

für deinen fall würde es im übrigen sinn machen, nur eine eingabemaske und ein datenfile zu nutzen. der code dürfte sich damit auf etwa 50zeilen belaufen. am ende wäre das script damit deutlich dynamischer und vorallem auch übersichtlicher. die suche eventueller fehler steigt ja bekanntlich mit der komplexität des codes, wodurch ein effizienter übersichtlicher code immer bevorzugt werden sollte.
lolkop is offline  
Reply


Similar Threads Similar Threads
Array und Stringsplit
09/21/2013 - AutoIt - 5 Replies
Tach hab nun wieder ein kleines problem und zwar das sich stringsplit und arrays nicht so wirklich vertragen. Ich lese aus einer .ini mehrere zahlen aus, da nun die zahlen einzeln ausgegebn werden müssen verwende ich stringsplit. Wenn ich nun via _arrayDisblay diese ausgeben will geht das ohne probleme, sobald ich aber einzelne werte des array ausgebn will gibt er mir ein error aus. $wearing1 = IniRead("test.ini","1","2 ","") $aZahlen = StringSplit($wearing1, " ",2)...
subscript used with non-array variable
06/09/2013 - AutoIt - 6 Replies
Hey Leute, ich bin vor kurzem auf AutoIT gestoßen und interessiere mich für die ImageSearch Funktion, also habe ich mir ein kleines Script gebastelt. Das Script soll nach einem bestimmten Bild suchen und wenn dieses Bild nicht gefunden wurde die F1 Taste drücken (F1 generiert in einem Spiel für welches ich das Script nutzen will ein neues Bild). Das Script soll dann solange F1 drücken, bis ein bestimmtes Bild gefunden wurde, und dann eine MsgBox anzeigen. Da es mein erstes kleines mini...
[HELP] _FTP_ListToArrayEx Subscript used with non Array variable
02/29/2012 - AutoIt - 2 Replies
Ich habe das problem das bei meinem Script der Fehler : "Subscript used with non Array variable" auftaucht. Der Fehler ist angeblich auf Linie 25 aber _FTP_ListToArrayEx müsste eigentlich ein Array zurückgeben sogar bei einem Fehler und ich bin mir sicher das die Connection Stimmt. Ich hoffe ihr könnt mir Helfen Ja ich weis ich könnte das auch kürzer machen aber für`n Momment is es so okey also bitte unterlasst diesbezügliche Kommentare Script: #include-once
Problem error: Subscript used whit non-Array variable "
08/26/2010 - Last Chaos - 1 Replies
hey leute, seitdem mein laptop ein windows update gemacht hat funktioniert der ultra bot nicht. es dann kommt immer die fehlermeldung " error: Subscript used whit non-Array variable " vor diesem update ging der bot noch.
beliebiege variable aus array
04/21/2010 - AutoIt - 3 Replies
hallo zusammen. ich arbeite zur zeit an einem kleinen programm und dafür ist es nötig, dass autoit vergleicht, ob eine bestimmte variable innerhalb eines array vorhanden ist. das array enthält zum bsp variabeln mit den werten: 1, 2 und 3. jetzt soll überprüft werden, ob die variable a im array ist (a=1, z.B.). das array hab ich natürlich schon erstellt (1dimensional), nur der abgleich ist knifflig. ich habs mit if $a= $array_items Then $score= $score+1 EndIf



All times are GMT +1. The time now is 21:13.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.