Kundenliste nach Alphabet in INI-Datei sortieren

  • Änderung

    ich möcht eine Kundenliste nach Alphabet in einer INI-Datei sortieren

    Muster:
    [1]
    Position = 1
    Label = Name, Vorname
    Button = Name
    Filename = Name\Kunde.exe
    Workingdir = Name\

    Die Reihenfolge in der INI-Datei soll nach Alphabet erfolgen, auch mit der Funktion:
    IniWrite

    Einmal editiert, zuletzt von moppel (2. Dezember 2006 um 21:08)

  • 1) Ich würde es in ein Array schreiben lassen und dann über _Array Sort einfach sortieren lassen, dann neu schreiben

    2) Wonach soll sotiert werden? name? Vorname? Button?

  • Danke huggy

    Sortieren der Sektionen nach "Label"

    Mit Array kenne ich mich nicht aus und weis nicht wie man das programmiert

  • So, gleich fertig ;)

    Ney jetzt häng ich wieder :P

    Einmal editiert, zuletzt von huggy (2. Dezember 2006 um 13:45)

    • Offizieller Beitrag

    Ich hab dir mal 'ne Lösung erstellt. :)

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    ; Nehmen wir mal an, deine Daten werden erfaßt oder ausgelesen oder was auch immer.
    ; Die Anbindung daran bekommst du bestimmt hin ;)
    ; Habe hier einfach ein paar Musterdaten erfunden
    Dim $INI_Pfad = @ScriptDir & "\Kunden.INI"
    Dim $Pos, $Name
    Dim $arKunden[6]
    $arKunden[0] = "Meier, Bernd" ; z.B. aus Inputfeld: _ArrayAdd($arKunden, GUICtrlRead($Inputfeld))
    $arKunden[1] = "Zeiger, Maria" ; oder aus Feld Name u. VName: _ArrayAdd($arKunden, GUICtrlRead($InName) & ", " & GUICtrlRead($InVName))
    $arKunden[2] = "Kaufmann, Ulrike"
    $arKunden[3] = "Bertel, Lutz"
    $arKunden[4] = "Weber, Alfred"
    $arKunden[5] = "Ullrich, Jan"

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

    ;Array sortieren
    _ArraySort($arKunden)

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

    ; INI schreiben
    For $i = 0 To UBound($arKunden)-1
    $Pos = $i +1
    $Name = StringLeft($arKunden[$i], StringInStr($arKunden[$i], ",") -1)
    IniWrite($INI_Pfad, $Pos, "Position", $Pos)
    IniWrite($INI_Pfad, $Pos, "Label", $arKunden[$i])
    IniWrite($INI_Pfad, $Pos, "Button", $Name)
    IniWrite($INI_Pfad, $Pos, "Filename", $Name & "\Kunde.exe")
    IniWrite($INI_Pfad, $Pos, "Workingdir", $Name & "\")
    Next

    [/autoit]


    Falls schon eine INI existiert:

    [autoit]

    #include <array.au3>
    ; hab dein Bsp. so verstanden, dass "Position" = [Section]
    ; falls die INI schon existiert und diese sortiert werden soll:
    Dim $INI_Pfad_r = @ScriptDir & "\Kunden.INI"
    Dim $INI_Pfad_w = @ScriptDir & "\Kunden1.INI"
    Dim $Pos, $Name, $arSection
    Dim $arKunden[1]

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

    $arSection = IniReadSectionNames($INI_Pfad_r)
    For $i = 1 To $arSection[0]
    _ArrayAdd($arKunden, IniRead($INI_Pfad_r, $arSection[$i], "Label", ""))
    Next

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

    ;Array sortieren
    _ArraySort($arKunden)

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

    ; INI schreiben
    For $i = 1 To UBound($arKunden)-1
    $Pos = $i
    $Name = StringLeft($arKunden[$i], StringInStr($arKunden[$i], ",") -1)
    IniWrite($INI_Pfad_w, $Pos, "Position", $Pos)
    IniWrite($INI_Pfad_w, $Pos, "Label", $arKunden[$i])
    IniWrite($INI_Pfad_w, $Pos, "Button", $Name)
    IniWrite($INI_Pfad_w, $Pos, "Filename", $Name & "\Kunde.exe")
    IniWrite($INI_Pfad_w, $Pos, "Workingdir", $Name & "\")
    Next

    [/autoit]
  • Die Daten in einer SQLIte Datenbank zu erfassen ist vorzuziehen, die Daten lassen sich von dort auch sortiert ausgeben.

  • mausilein:
    Datenbank ist schlecht, da die Daten auf einer mobilen HDD sind.

    BugFix:
    anhängend ein Screenshot wie das auslesen der ini aussieht (Entwurf),
    wie die Daten eingegeben werden und unten die Aktionen.
    Wie gesagt alles nur Entwurf.

    ini-Aufbau:
    [1]
    Position = 1
    Label = Name, Vorname
    Button = Name
    Filename = Name\Kunde.exe
    Workingdir = Name\

    Vielleicht überschneiden sich Sektionsname und "Position" ??????

    Eigentlich sollen unbenutzte Einträge unsichtbar sein und bei klick auf "Neuer Kunde" eine neue Zeile sichtbar werden.
    Daraus folgt die nächste Frage:
    Wenn sich in der GUI was ändert wie wird es sichtbar ohne das Script neu zu starten??

  • Wäre auch eine möglichkeit siehe die gesamte Antwort.
    Beim Programmieren bin ich leider noch Neuling.

    • Offizieller Beitrag

    Hi,

    kommt auf die Größe und auf die Aktionen an, die du mit deinem Datenbestand machen willst.

    Eine DB für 20 Kunden ist sicher nicht notwendig. Bei 2000 würde ich sagen, kommst du nicht mehr drumrum.

    Wieso sortierst du die Dinge eigentlich in der ini? Ich meine, dass müßtest du ja jedes mal machen, wenn du einen neuen hinzufügst.

    Ich würde lieber in der GUI sortieren, als jedes mal den Datenbestand.

    So long,

    Mega

    • Offizieller Beitrag

    Also ich denke, die INI ist denkbar ungeeignet für deine Zwecke.
    Da du wahrscheinlich keine sehr große Anzahl an Kunden hast, würde ich eine Verwaltung in einer Textdatei vorschlagen.
    Kunden.txt Könnte so aussehen:
    Position|Label|Button|Filename|Workingdir
    1|Meier, Hans|Meier|Meier\Kunde.exe|Meier\
    Mit:

    [autoit]

    _FileReadToArray("Kunden.txt",$arKunden)

    [/autoit]

    kannst du dann die Daten beim Start in das Array laden. Neue Daten dem Array hinzufügen oder Daten entfernen, Daten sortieren.
    Beim Programmende schreibst du die Daten wieder in die Datei.
    Schau mal hier rein. Da hab ich das auch so gelöst.

  • Hab ich getestet, ist soweit ok, aber diese Daten werden in einem anderen Script als "Run"-Parameter gebraucht.