Array-Grundschule: 1. Klasse

  • !!! Bitte Thema verschieben, wenn im falschem Bereich gepostet !!!


    Hallo.

    Ich möchte endlich Array lernen, damit ich auch BugFix und die anderen Array User verstehe. Zur Hilfe nehme ich mir: BugFix Array Hilfe

    Habe nun erst einmal folgendes geschrieben:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    Dim $arTest[50] ; Array hat 50 Werte
    Dim $arTest[0] ; Array's kleinster Wert = 0, also $arTest[0]

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

    Dim $arJahr[20] ; Array hat 20 Werte
    Dim $arJahr[0] ; Array's kleinster Wert = 0; also $arJahr[0]

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

    ; hier die 50 Array-Werte
    $arTest[0] = '001' ; 01.01. // 01. Januar
    $arTest[1] = '002' ; 02.02. // 02. Januar
    $arTest[2] = '003'
    $arTest[3] = '004'
    $arTest[4] = '005'
    $arTest[5] = '006'
    $arTest[6] = '007'
    $arTest[7] = '008'
    $arTest[8] = '009'
    $arTest[9] = '010'
    $arTest[10] = '011'
    $arTest[11] = '012'
    $arTest[12] = '013'
    $arTest[13] = '014'
    $arTest[14] = '015'
    $arTest[15] = '016'
    $arTest[16] = '017'
    $arTest[17] = '018'
    $arTest[18] = '019'
    $arTest[19] = '020'
    $arTest[20] = '021'
    $arTest[21] = '022'
    $arTest[22] = '023'
    $arTest[23] = '024'
    $arTest[24] = '025'
    $arTest[25] = '026'
    $arTest[26] = '027'
    $arTest[27] = '028'
    $arTest[28] = '029'
    $arTest[29] = '030'
    $arTest[30] = '031'
    $arTest[31] = '032'
    $arTest[32] = '033'
    $arTest[33] = '034'
    $arTest[34] = '035'
    $arTest[35] = '036'
    $arTest[36] = '037'
    $arTest[37] = '038'
    $arTest[38] = '039'
    $arTest[39] = '040'
    $arTest[40] = '041'
    $arTest[41] = '042'
    $arTest[42] = '043'
    $arTest[43] = '044'
    $arTest[44] = '045'
    $arTest[45] = '046'
    $arTest[46] = '047'
    $arTest[47] = '048'
    $arTest[48] = '049'
    $arTest[49] = '050'

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

    Dim $arJahr[0] = '001' ; 1990
    Dim $arJahr[1] = '002' ; 1991
    Dim $arJahr[2] = '003' ; 1992
    Dim $arJahr[3] = '004' ; 1993
    Dim $arJahr[4] = '005' ; 1994
    Dim $arJahr[5] = '006' ; 1995
    Dim $arJahr[6] = '007' ; 1996
    Dim $arJahr[7] = '008' ; 1997
    Dim $arJahr[8] = '009' ; 1998
    Dim $arJahr[9] = '010' ; 1999
    Dim $arJahr[10] = '011' ; 2000
    Dim $arJahr[11] = '012' ; 2001
    Dim $arJahr[12] = '013' ; 2002
    Dim $arJahr[13] = '014' ; 2003
    Dim $arJahr[14] = '015' ; 2004
    Dim $arJahr[15] = '016' ; 2005
    Dim $arJahr[16] = '017' ; 2006
    Dim $arJahr[17] = '018' ; 2007
    Dim $arJahr[18] = '019' ; 2008
    Dim $arJahr[19] = '020' ; 2009
    Dim $arJahr[20] = '021' ; 2010

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

    So, nun habe ich die kleinsten Werte, die größten Werte und alle möglichen Werte aufgelistet. Einen Arrayblock für die Tage, einen Arrayblock für die Jahre.

    Was muß ich nun machen?

    Ich möchte dazu ein Gui haben, wo ich z. B. eingebe "21.01.1997". Das ist der 21 Tage des Jahres 1997.
    So sollte er mir durch die Array ($arTest[20] & $arJahr[7]), in die Datei (test.ini) schreiben:

    [dat]
    00001 = 021008 ; laufende Nummer 00001 mit dem eingegebenen Datum auf julianisch 021008

    Mein gedachtes Gui:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstants.au3>
    #include <Date.au3>

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


    Dim $arTest[50] ; Array hat 50 Werte
    Dim $arTest[0] ; Array's kleinster Wert = 0, also $arTest[0]

    Dim $arJahr[20] ; Array hat 20 Werte
    Dim $arJahr[0] ; Array's kleinster Wert = 0; also $arJahr[0]

    ; hier die 50 Array-Werte
    $arTest[0] = '001' ; 01.01. // 01. Januar
    $arTest[1] = '002' ; 02.02. // 02. Januar
    $arTest[2] = '003'
    $arTest[3] = '004'
    $arTest[4] = '005'
    $arTest[5] = '006'
    $arTest[6] = '007'
    $arTest[7] = '008'
    $arTest[8] = '009'
    $arTest[9] = '010'
    $arTest[10] = '011'
    $arTest[11] = '012'
    $arTest[12] = '013'
    $arTest[13] = '014'
    $arTest[14] = '015'
    $arTest[15] = '016'
    $arTest[16] = '017'
    $arTest[17] = '018'
    $arTest[18] = '019'
    $arTest[19] = '020'
    $arTest[20] = '021'
    $arTest[21] = '022'
    $arTest[22] = '023'
    $arTest[23] = '024'
    $arTest[24] = '025'
    $arTest[25] = '026'
    $arTest[26] = '027'
    $arTest[27] = '028'
    $arTest[28] = '029'
    $arTest[29] = '030'
    $arTest[30] = '031'
    $arTest[31] = '032'
    $arTest[32] = '033'
    $arTest[33] = '034'
    $arTest[34] = '035'
    $arTest[35] = '036'
    $arTest[36] = '037'
    $arTest[37] = '038'
    $arTest[38] = '039'
    $arTest[39] = '040'
    $arTest[40] = '041'
    $arTest[41] = '042'
    $arTest[42] = '043'
    $arTest[43] = '044'
    $arTest[44] = '045'
    $arTest[45] = '046'
    $arTest[46] = '047'
    $arTest[47] = '048'
    $arTest[48] = '049'
    $arTest[49] = '050'

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

    Dim $arJahr[0] = '001' ; 1990
    Dim $arJahr[1] = '002' ; 1991
    Dim $arJahr[2] = '003' ; 1992
    Dim $arJahr[3] = '004' ; 1993
    Dim $arJahr[4] = '005' ; 1994
    Dim $arJahr[5] = '006' ; 1995
    Dim $arJahr[6] = '007' ; 1996
    Dim $arJahr[7] = '008' ; 1997
    Dim $arJahr[8] = '009' ; 1998
    Dim $arJahr[9] = '010' ; 1999
    Dim $arJahr[10] = '011' ; 2000
    Dim $arJahr[11] = '012' ; 2001
    Dim $arJahr[12] = '013' ; 2002
    Dim $arJahr[13] = '014' ; 2003
    Dim $arJahr[14] = '015' ; 2004
    Dim $arJahr[15] = '016' ; 2005
    Dim $arJahr[16] = '017' ; 2006
    Dim $arJahr[17] = '018' ; 2007
    Dim $arJahr[18] = '019' ; 2008
    Dim $arJahr[19] = '020' ; 2009
    Dim $arJahr[20] = '021' ; 2010

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

    GUICreate("Datum Eingabe", 100,50, 100, 45, -1, 0x00000018); WS_EX_ACCEPTFILES
    $file = GUICtrlCreateInput ( "", 10, 5, 80, 20)
    $ok = GUICtrlCreateButton ("Ok", 20, 25, 60, 20)
    GUISetState ()

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

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()
    Select
    Case $msg = $ok

    ; ?????????????

    EndSelect
    Wend

    ; Funktion julianisches Datum von: Xenobiologist
    Func _alinaDatum($year, $month, $day)
    Return StringFormat('%0.3d', $year - 1989) & StringFormat('%0.3d', _dayOfyear($year, $month, $day))
    EndFunc ;==>_alinaDatum

    Func _dayOfyear($year, $month, $day)
    Return _DateDiff('d', $year & '/01/01', $year & '/' & $month & '/' & $day) + 1
    EndFunc ;==>_dayOfyear
    ; Funktionsende

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




    Wie setze ich das ganze nun richtig um. Er muß ja irgendwie durch die Eingabe erst einmal die beiden Array ansprechen und dann richtig verarbeiten. Da habe ich jedoch Verständnisprobleme. Sorry, wenn ich das so kompliziert dargestellt habe, aber ich würde mich freuen,
    wenn mir dabei jemand hilft und ich so lerne mit Array's zu arbeiten.

    Halt direkt an einem Beispiel lernen und andere damit zeigen, wie mal sich mit Array von klein auf beschäftigen kann und dann sich hoch arbeitet und irgendwann mal so weit kommt, wie die "Array Kings and User".

    LG und DANKE.

    Lina

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    3 Mal editiert, zuletzt von Alina (30. Oktober 2007 um 21:24)

    • Offizieller Beitrag

    Nur mal nach einem kurzen Blick, die notwendigen Korrekturen, die Array betreffend:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <Date.au3>


    Dim $arTest[50] ; Array hat 50 Werte ==> OK
    ;~ Dim $arTest[0] ; Array's kleinster Wert = 0, also $arTest[0] ==> FALSCH
    ; Array wurde nochmal deklariert mit Größe '0' - das geht nicht, kleinste Größe 1

    Dim $arJahr[20] ; Array hat 20 Werte ==> ZU KLEIN, da 21 Werte gesetzt
    ;~ Dim $arJahr[0] ; Array's kleinster Wert = 0; also $arJahr[0] ==> FALSCH
    ; selber Fehler, wie oben

    ; hier die 50 Array-Werte
    ; Wenn fortlaufende Werte gesetzt werden sollen empfiehlt sich der Einsatz einer Schleife
    ; Beachten: Index 0 = Wert 1 ==> also immer: Wert = Index+1
    For $i = 0 To 49
    $arTest[0] = $i +1
    Next

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

    ; Hier wird in jeder Zeile das Array neu deklariert!!! ==> FALSCH
    ;~ Dim $arJahr[0] = '001' ; 1990
    ;~ Dim $arJahr[1] = '002' ; 1991
    ; Wertzuweisung ohne Dim!
    For $i = 0 To 20
    $arJahr[$i] = '00' & $i +1
    Next

    [/autoit]

    Nachher schau ich dann mal, was es eigentlich werden soll ;)

  • BugFix .

    Also das erste Schuljahr ist ja bekanntlich nicht immer leicht, aber ich finde es sehr gut, das Du zeigst, was falsch und richtig ist. So lernt man doch am besten. Sorry, wenn ich nun mich als "Versuchskaninchen" nehme, aber vllt. schauen andere sich auch dieses Thema an und lernen dann davon.

    Also muß es heißen Dim $arTest[364]? Wir ja 365 Tage haben.

    Ich möchte unbedingt Array lernen und den Umgang.

    Habe jetzt schon mal gelernt, das man bei kompakten Teilen mit Schleifen arbeitet.

    Freue mich schon, wenn Du weiter machst. Wenn das Gui dann fertig ist, meine ich verstehe ich schon einiges mehr und kann vllt. selber mit Array bisschen umgehen. Okay?

    Ich bewundere die Leute, die mit Array umgehen können. Ist nämlich doch rigendwo etwas besonderes.

    Bis spääääääter.

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    Einmal editiert, zuletzt von Alina (30. Oktober 2007 um 19:27)

    • Offizieller Beitrag

    Hab grad mal versucht zu verstehen, was du als Endergebnis haben möchtest.
    Das Datum, das du verwendest ist aber kein Julianisches Datum, denn dieses wird angegeben in der Zahl der Tage, die seit dem 1. Januar 4712 v. Chr.12:00 Uhr vergangen sind.

    Der 21.01.1997 ist Julianisch: 2450469,5

    Also, ich bin mir jetzt nicht ganz sicher, was du erreichen möchtest. Vielleicht kannst du das nochmal kurz skizzieren.
    Ich vermisse bei deiner Zusammenstellung eine Zuweisung für den Monat?

  • Also im Ersten Array:
    001 = 1. Januar
    002 = 2. Januar
    ...
    032 = 1. Februar
    033 = 2. Februar
    ...
    365 = 31. Dezember

    Zweites Array:
    001 = 1990
    002 = 1991
    ...

    Soweit verständlich? Ich gehe mal davon aus.

    Habe gerade gesehen, das ich ganz oben die Werte falsch geschrieben habe. statt der 1 hätte ich 001 schreiben müssen, da sonst die Werte nicht sechsstellig sind und das müssen sie sein.

    Über ein Gui (siehe oben) gebe ich ein Datum ab dem 01.01.1990 ein. Gebe ich z. B. den 21.01.1990 ein, so soll beim drücken des OK-Buttons in die Datei test.ini folgendes geschrieben werden: 021001 mit einer Nr. vorweg.

    test.ini sieht dann so aus:
    [dat]
    000001 = 021001

    Eigentlich ist die 000001 eine laufende Nr. aber ich werde es beim Gui so später machen, das man die Nr. mit eingeben muß. Ist einfacher, wenn man etwas berichtigen muß. Aber das ist derzeitig gar nicht wichtig, denn das GUI wird, wenn ich das mit dem Array verstanden habe erweitert.

    Ok, dann ist es kein julianisches Datum, aber nach dem System aufgebaut (grob).

    Gruß, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Hi Alina,

    also die Aufgabe ist ja bereits durch die Funktionen von Xeno gelöst.
    Die Verwendung von Arrays ist für diese Aufgabe leider gar nicht zu gebrauchen.

    Hier die Lösung für die Aufgabe, für Arrays mußt du dir jetzt was neues ausdenken ;)
    Ich habs so gemacht, dass es egal ist, ob du '1.5.79' oder '01.05.1979' eingibst.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <Date.au3>
    GUICreate("Datum Eingabe", 100,50, 100, 45, -1, 0x00000018); WS_EX_ACCEPTFILES
    $file = GUICtrlCreateInput ( "", 10, 5, 80, 20)
    $ok = GUICtrlCreateButton ("Ok", 20, 25, 60, 20)
    GUISetState ()

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()
    Select
    Case $msg = $ok
    $date = GUICtrlRead($file)
    $val = StringSplit($date, '.')
    $d = StringRight('0' & $val[1],2)
    $m = StringRight('0' & $val[2],2)
    If $val[3] > 30 Then
    $y = StringRight(19 & $val[3], 4)
    Else
    $y = StringRight(20 & $val[3], 4)
    EndIf
    ; statt ConsoleWrite ==> in INI schreiben
    ConsoleWrite(_alinaDatum($y, $m, $d) & @CRLF)
    EndSelect
    Wend

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

    Func _alinaDatum($year, $month, $day)
    Return StringFormat('%0.3d', $year - 1989) & StringFormat('%0.3d', _dayOfyear($year, $month, $day))
    EndFunc ;==>_alinaDatum

    Func _dayOfyear($year, $month, $day)
    Return _DateDiff('d', $year & '/01/01', $year & '/' & $month & '/' & $day) + 1
    EndFunc ;==>_dayOfyear

    [/autoit]
  • OK BugFix .

    Dann suche ich mir was neues odetr warte ab, was Deine Hilfeseite die nächsten Tage bringt.

    Vielen Dank !!!

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • 1.) Verschoben, da besser in Hilfe.

    So sieht es nun funktionsfähig aus:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstants.au3>
    #include <Date.au3>
    GUICreate("Datum Eingabe", 100,80, 100, 45, -1, 0x00000018); WS_EX_ACCEPTFILES

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

    $nr = GUICtrlCreateInput ( "", 10, 5, 80, 20)
    $file = GUICtrlCreateInput ( "", 10, 30, 80, 20)

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

    $ok = GUICtrlCreateButton ("Ok", 20, 55, 60, 20)
    GUISetState ()

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()
    Select
    Case $msg = $ok
    $lfdnr = GUICtrlRead($nr)
    $date = GUICtrlRead($file)
    $val = StringSplit($date, '.')
    $d = StringRight('0' & $val[1],2)
    $m = StringRight('0' & $val[2],2)
    If $val[3] > 30 Then
    $y = StringRight(19 & $val[3], 4)
    Else
    $y = StringRight(20 & $val[3], 4)
    EndIf
    IniWrite(@ScriptDir & "daten.ini", "dat" , $lfdnr, _alinaDatum($y, $m, $d)); & @CRLF)

    EndSelect
    Wend

    Func _alinaDatum($year, $month, $day)
    Return StringFormat('%0.3d', $year - 1989) & StringFormat('%0.3d', _dayOfyear($year, $month, $day))
    EndFunc ;==>_alinaDatum

    Func _dayOfyear($year, $month, $day)
    Return _DateDiff('d', $year & '/01/01', $year & '/' & $month & '/' & $day) + 1
    EndFunc ;==>_dayOfyear

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

    !!! Danke an BugFix & Xenobiologist !!!

    Frage: Wie mache ich es jetzt, das ich im oberen Eingabefeld des GUI's den letzten Eintrag beim starten des Scriptes bekomme? Nach einer Eingabe bleiben ja die Daten bestehen. ;)

    Die daten.ini
    [dat]
    00001 = 021008
    00002 = 027008
    00003 = 035008

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    $val = IniReadSection($INI, 'section')
    letzter Schlüssel = $val[$val[0]][0]
    letzter Wert = $val[$val[0]][1]

    Beim Start Aufrufen und mit GUICtrlSetData() eintragen.

    Edit: Aber willst du die lfd. Nr. nicht lieber automatisch hochzählen? User machen nur Fehler :D

    Also in der GUI ganz rauslassen. Beim Start Auslesen und für aktuelle Nutzung +1.

  • BugFix .

    das mit dem automatischen Auslesen ist eine gute Idee, aber ich bekomme das nicht hin. Nicht einmal das mit dem auslesen des zuletzt eingegebenen Wertes. :(

    LG und Danke.

    Lina

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Hi, probiers mal so:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <Date.au3>

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

    $val = IniReadSection(@ScriptDir & "daten.ini", "dat")
    $lfdnr = $val[$val[0][0]][0]

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

    GUICreate("Datum Eingabe", 100,80, 100, 45, -1, 0x00000018); WS_EX_ACCEPTFILES
    ;~ $nr = GUICtrlCreateInput ( "", 10, 5, 80, 20)
    $file = GUICtrlCreateInput ( "", 10, 30, 80, 20)

    $ok = GUICtrlCreateButton ("Ok", 20, 55, 60, 20)
    GUISetState ()

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()
    Select
    Case $msg = $ok
    $lfdnr += 1
    $date = GUICtrlRead($file)
    $val = StringSplit($date, '.')
    $d = StringRight('0' & $val[1],2)
    $m = StringRight('0' & $val[2],2)
    If $val[3] > 30 Then
    $y = StringRight(19 & $val[3], 4)
    Else
    $y = StringRight(20 & $val[3], 4)
    EndIf
    IniWrite(@ScriptDir & "daten.ini", "dat" , $lfdnr, _alinaDatum($y, $m, $d)); & @CRLF)

    EndSelect
    Wend

    Func _alinaDatum($year, $month, $day)
    Return StringFormat('%0.3d', $year - 1989) & StringFormat('%0.3d', _dayOfyear($year, $month, $day))
    EndFunc ;==>_alinaDatum

    Func _dayOfyear($year, $month, $day)
    Return _DateDiff('d', $year & '/01/01', $year & '/' & $month & '/' & $day) + 1
    EndFunc ;==>_dayOfyear

    [/autoit]
  • Hallo BugFix.

    ini siehtz dann so aus:

    [dat]
    00001 = 021008 vorher
    00002 = 027008 vorher
    00003 = 035008 vorher
    4=366011 nachher
    5=66011 nachher
    6=65011 nachher
    7=65011 nachher


    Vorher= richtig

    Nacher= Nullen vorweg fehlen und bei den Tagen 0 - 99 schreibt er die Zahl hinter dem Gleichzeichen auch nicht sechsstellig.

    Schlafen wir glaube ich beide erst einmal.

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    Einmal editiert, zuletzt von Alina (31. Oktober 2007 um 09:05)

    • Offizieller Beitrag

    Hi Alina,

    ich habe dir jetzt eine gaaaanz schnuckelige Lösung gebastelt :]

    Den Button habe ich als Default Pushbutton definiert, damit man nicht immer zur Maus wechseln muß um die Eingabe zu bestätigen ;)

    Und es wird immer der zuletzt erfaßte Wert angezeigt. Wenn du also eine Liste abarbeitest, siehst du anhand der laufenden Nr. was du zuletzt beim Wickel hattest. Kannst also immer mal zwischendurch 'ne Kaffeepause machen.
    :tassen: geht natürlich auch :D

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <Date.au3>
    Dim $pathINI = @ScriptDir & "\daten.INI"
    GUICreate("Datum Eingabe", 200, 120, 100, 45, -1, 0x00000018)
    $lastRealDate = GUICtrlCreateLabel('', 90, 7, 80, 17)
    $lastNr = GUICtrlCreateLabel('', 10, 30, 60, 17)
    $lastDate = GUICtrlCreateLabel('', 90, 30, 60, 17)
    $aktNr = GUICtrlCreateLabel('', 10, 63, 60, 17)
    $file = GUICtrlCreateInput ( "", 90, 60, 80, 20)
    $ok = GUICtrlCreateButton ("OK", 70, 90, 60, 21, $BS_DEFPUSHBUTTON)

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

    If FileExists($pathINI) Then
    $val = IniReadSection($pathINI, "dat")
    $lfdnr = $val[$val[0][0]][0]
    GUICtrlSetData($lastRealDate, _REalinaDatum($val[$val[0][0]][1]))
    GUICtrlSetData($lastNr, $lfdnr)
    GUICtrlSetData($lastDate, $val[$val[0][0]][1])
    GUICtrlSetData($aktNr, StringRight('0000' & $lfdnr+1,5))
    Else
    $lfdnr = 0
    GUICtrlSetData($aktNr, '00001')
    EndIf
    GUISetState ()

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

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()
    Select
    Case $msg = $ok
    $date = GUICtrlRead($file)
    If $date <> '' Then
    $lfdnr += 1
    $val = StringSplit($date, '.')
    $d = StringRight('0' & $val[1],2)
    $m = StringRight('0' & $val[2],2)
    If $val[3] > 30 Then
    $y = StringRight(19 & $val[3], 4)
    Else
    $y = StringRight(20 & $val[3], 4)
    EndIf
    $date2write = StringRight('00000' & _alinaDatum($y, $m, $d),6)
    If IniWrite($pathINI, "dat" , _
    StringRight('0000' & $lfdnr,5), $date2write) <> 1 Then
    GUICtrlSetData($file, 'FEHLER')
    Else
    GUICtrlSetData($file, '')
    GUICtrlSetData($lastRealDate, _REalinaDatum($date2write))
    GUICtrlSetData($lastNr, StringRight('0000' & $lfdnr,5))
    GUICtrlSetData($lastDate, $date2write)
    GUICtrlSetData($aktNr, StringRight('0000' & $lfdnr+1,5))
    EndIf
    EndIf
    EndSelect
    Wend

    Func _alinaDatum($year, $month, $day)
    Return StringFormat('%0.3d', $year - 1989) & StringFormat('%0.3d', _dayOfyear($year, $month, $day))
    EndFunc ;==>_alinaDatum

    Func _dayOfyear($year, $month, $day)
    Return _DateDiff('d', $year & '/01/01', $year & '/' & $month & '/' & $day) + 1
    EndFunc ;==>_dayOfyear

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

    Func _REalinaDatum($DATUM)
    Local $yyyy = StringLeft($DATUM, 3) + 1989
    Local $date = _DateAdd('d', Number(StringRight($DATUM, 3))-1, $yyyy & '/01/01')
    Return StringRight($date,2) & '.' & StringMid($date,6,2) & '.' & StringLeft($date,4)
    EndFunc

    [/autoit]

    Edit: Und noch ein wenig mehr Komfort. Du siehst jetzt immer den zuletzt eingetragenen Wert mit: lfd. Nr / konvertiertem Datum / Originaldatum

  • BugFix .

    Das ist echt hammer Granate, wie die Jugend ja heute sagt.

    Nun kann ich mich ran machen und das GUI komplett machen. Schade das ich heute so viel zu tun habe, denn am liebsten würde ich das ganze GUI heute erstellen. Aber das muß bisschen warten.


    Sind cirka 12 x 25.000 Datensätze die später dann über das fertige GUI eingegeben werden müssen. Aber das werde ja nicht ich machen, sondern dafür werden die Damen der Archivierung sich kümmern. Was ich auf jeden Fall machen werde ist, das regelmäßig die Daten gespeichert werden, wo die nicht wieder nach Stunden alles "ausversehen" löschen oder die Daten weg sind, weil die den Computer soweit bekommen haben, ds gar nichts mehr geht. War Smastag der Fall nach gut neun Stunden Dateneingabe. Die Daten waren weg und die ganze Tagesarbeit umsonst.

    DANKE BUGFIX !!!!

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl