arbeiten mit Ini-Dateien

  • ich möchte einzeln die werte aus einer variable auslesen können, wie oben beschrieben, weil später in einer csv datei die kundennamen rein sollen, und es soll ja so wenig wie möglich "doppelt" geschrieben werden. am besten aus einer ini-datei. das auslesen klappt ja schon soweit, nur es würde besser passen wenn ich wie oben beschrieben werte einzeln auslesen könnte mit ner schleife.

    Einmal editiert, zuletzt von gorgo1984 (22. März 2009 um 11:52)

    • Offizieller Beitrag

    Schau mal in die Hilfe , was du suchst ist IniReadSection .

  • Wenn ich das Richtig verstehe geht das immer so weiter, oder Kunde1 Kunde2 Kunde3 und so oder? Dann mach es einfach so:

    Spoiler anzeigen
    [autoit]

    $INI = "Test.ini"
    $KundenZahl = 2
    Global $Text
    For $1 = 1 To $KundenZahl
    $Read = IniRead ($INI,"Kunden","Kunde" & $1,"")
    If $Text <> "" Then
    $Text = $Text & "," & $Read
    Else
    $Text = $Read
    EndIf
    Next
    MsgBox (0,"",$Text)

    [/autoit]

    Und die INI:

    Spoiler anzeigen

    [Kunden]
    Kunde1=1
    Kunde2=2

    mfg. Jam00

  • Hmm,

    guck mal unter den Array-Funktionen nach. Habe derzeit leider nur eine Uralt-Version installiert, aber mit Stringsplit kannst Du mehrere Kundennamen in einem String in ein Array kopieren, und es gibt auch eine Arrayfunktion für den umgekehrten Weg.

    Dann kannst Du über den Index des Array auf die einzelnen Elemente zugreifen.

    Gruß,

    True

  • Hallo Gorgo,

    bitte beschreibe Dein Problem etwas genauer. Ich habe jetzt den gesamten Thread 3x komplett durchgelesen und könnte es sein daß Du die Variablen in der FOR-Schleife benutzen willst, um nicht die 1,2,3,4,...Maximaleanzahlkunden schreiben zu müssen?

    Also in etwa so?

    [autoit]

    For $index =1 To $maximaleanzahlkunden ;wäre z.B. die Anzahl der Zeilen deiner *.INI-Datei, in jeder Zeile steht ein Kunde
    $kunde[$index] = _hierliestdieschleifedatenvonirgendwoher() ; z.B. Iniread()
    Next

    [/autoit]


    Im Feld $kunde[] wären nun alle Kunden aus der *.INI Datei enthalten.

    Um die jetzt alle als *.CSV abzuspeichern könnte man das so machen

    [autoit]

    For $index =1 To $maximaleanzahlkunden ;wäre z.B. die Anzahl der Zeilen deiner *.INI-Datei, in jeder Zeile steht ein Kunde
    _schreibedatenirgendwohin($kunde[$index] & ",") ; z.B. in die *.CSV
    Next

    [/autoit]

    Inhalt der *.CSV wäre somit
    Kunde1,kunde2,kunde3,kunde4......

    ciao
    Andy

  • Was geht noch nicht?
    Wozu willst du InIReadSection in eine Schleife machen? Probier es mal so:

    [autoit]


    $Read = IniReadSection(@ScriptDir & "\kunde.ini", "Kunde") ; z.B. Iniread()
    For $index =1 To $Read[0][0]
    $kunde[$index] = $Read[$index][1]
    Next

    [/autoit]


    PS: Ist ungetestet!

    EDIT: Ach, und mach deine Scripte doch mal in einen Spoiler und einen AutoIt-Quellcode Feld!
    Einfach erst oben im bei erstellen auf SP und dann auf das AutoItIcon klicken, und dann das Script zwischen das zeugs machen!

    mfg. Jam00

  • Hallo,

    sollte eigentlich nun alle Klarheiten beseitigen^^

    Spoiler anzeigen
    [autoit]

    Dim $kunde[10],$Schluessel[10] ;je nach grösse der [Kunde]-sektion in der *.INI

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

    ;Inidatei erstellen
    $inidatei="Kundetest.ini"

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

    filedelete($inidatei)
    $sData = "kunde1=adam"&@crlf&"kunde2=berta"&@crlf&"kunde3=caesar"
    IniWriteSection($inidatei, "Kunde", $sData)

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

    ;Daten aus *.ini auslesen
    $Read = IniReadSection(@ScriptDir & "\kundetest.ini", "Kunde") ; z.B. Iniread()
    For $index =1 To $Read[0][0]
    $schluessel[$index] = $Read[$index][0]
    $kunde[$index] = $Read[$index][1]
    msgbox(0,"",$schluessel[$index]&" "&$Kunde[$index])
    Next

    [/autoit]

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (5. Februar 2009 um 09:27)

  • 1. wie willst du es denn haben?
    2. denke ich das das problem daran liegt das die ganze exel aktion innerhalb der schleife liegt (objcreate etc)
    3. halte ich es für unnötig die rückgabe der ini nochmal in 2 extra arrays aufzuteilen (man kann doch einfach $read[$index][0] ;schlüssel $read[$index][1] ;kunde

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Hallo,

    Gorgo nicht böse gemeint, aber du kennst den Spruch von wegen Würmer aus der Nase ziehen? ;)
    Es wäre alles viel einfacher für alle Beteiligten, wenn du in deinen Startpost 2 Dinge integriert hättest:


    Dann wäre die gesamte Aktion sicher in wenigen Stunden vom Tisch gewesen....
    Ok, zum Ablauf:
    Du brauchst eine Schleife innerhalb du die Kundennamen in der *.Ini-Daten nacheinander ausliest.
    Diese eingelesenen Daten sollen in derselben Schleife in eine Excel-Tabelle geschrieben werden.
    Solange weitermachen, bis keine weiteren Daten mehr in der *.ini sind.

    Programm:

    [autoit]

    *.ini-Datei öffnen und Kundenanzahl rausfinden
    *.excel-Datei öffnen und Datum und Uhrzeit in Zelle (1,1)ff schreiben
    Schleife: for $index=1 to kundenanzahl
    Schlüssel[$index] lesen (falls du den überhaupt brauchst...)
    Kunde[$index] aus *.ini-datei lesen...
    ...und in der *.excel-Datei in Zelle(1,$index+1) schreiben
    schleife wiederholen bis alle Kundennamen in der *.excel-Datei stehen
    *.ini- und *.excel-Dateien schliessen

    [/autoit]

    Jetzt müsstest du es schaffen :o) :rock:
    ciao
    Andy

  • ich wette jetzt beschwert er sich dass dein programm ne fehlermeldung bringt Andy :D:D:D:D

    Padmak

  • Hallo,
    bin grade bissl über die Excel-Daten gestolpert. Hab seit mehr als 10 Jahren kein Excel mehr. Für den Wert einer MS-Office-Lizenz bekam ich damals 5(!) Staroffice Lizenzen (die übrigens heute noch problemlos laufen).
    Daher klinke ich mich hier aus und übergebe an die DCOM-Spezialisten.

    Weiter oben im Thread war doch von einer *.csv-Datei die Rede? Damit hätte ich kein Problem gehabt :rolleyes:

    ciao
    .Andy

  • Es geht nach wie vor um eine csv-datei ;)
    Ist ja im prinzip ähnlich einer excel-datei.

    Habt ja recht das ich mich besser hätte ausdrücken sollen :)

    Es war eben so geplant das die Kunden von einer ini-Datei ausgelesen werden sollen, wegen späteren Erweiterungen und diese dann in einer
    csv-datei übergeben werden sollen. Also in jeder Zelle ein Kunde steht, mithilfe von Schleifen. Aber danke für eure Mühen.

    P.S. Ist klar das es ne Fehlermeldung gibt mit dem Quellcode von Andy :P


  • Programm:

    [autoit]

    *.ini-Datei öffnen und Kundenanzahl rausfinden
    *.excel-Datei öffnen und Datum und Uhrzeit in Zelle (1,1)ff schreiben
    Schleife: for $index=1 to kundenanzahl
    Schlüssel[$index] lesen (falls du den überhaupt brauchst...)
    Kunde[$index] aus *.ini-datei lesen...
    ...und in der *.excel-Datei in Zelle(1,$index+1) schreiben
    schleife wiederholen bis alle Kundennamen in der *.excel-Datei stehen
    *.ini- und *.excel-Dateien schliessen

    [/autoit]


    Komme leider nicht zu der Lösung, habe es versucht klappt leider nicht. Kann mir einer zu dem genannten Zitat nen Beispiel schreiben?

    Danke schon mal

    P.S. Hatte die letzten Wochen wenig Zeit mich mit dem Problem zu beschäftigen.es soll nach wie vor in einer csv-Datei geschrieben werden.

  • Hallo,
    da du deine bisherigen Postings in diesem Thread alle gelöscht hast, wäre es ggf sinnvoll, dein Script zu posten und eine Problembeschreibung zu erstellen.
    *GlaskugelmodusON*.....ich seh nix......*GlaskugelmodusOFF*
    ciao
    andy

  • Da habe ich gerade auch gesehen, war nen versehen;-)

    [autoit]


    $ini = IniReadSection(@ScriptDir & "\kunden.ini", "Kunden")

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

    $kunde1 = $template [1][1]
    $kunde2 = $template [2][1]

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

    $scriptdir= "C:\test.csv"

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

    ;Excel öffnen
    $app = ObjCreate("Excel.application")
    $app.Visible = true
    $open = $app.Workbooks.Open _
    ($scriptdir)

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

    ;in Excel schreiben
    $app.Cells(1,1).Value = @MDAY &"." & @MON &"." &@YEAR & " um " & @HOUR &":" &@MIN &"Uhr"
    $app.Cells(2,1).Value = $kunde1
    $app.Cells(2,2).Value = $kunde2

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

    Gruß

    Gorgo1984

  • Also es geht darum diese Kunden mit einer Schleife zu versehen. also so das ich nicht immer $kunde1 = $template [1][1]
    $kunde2 = $template [2][1] , ... schreiben muss

    • Offizieller Beitrag

    Probier mal so:

    [autoit]

    ;~ $ini = IniReadSection(@ScriptDir & "\kunden.ini", "Kunden") ; ?? $ini
    $template = IniReadSection(@ScriptDir & "\kunden.ini", "Kunden") ; wohl eher so!

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

    ;~ $kunde1 = $template [1][1]
    ;~ $kunde2 = $template [2][1]

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

    $scriptdir= "C:\test.csv"

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

    ;Excel öffnen
    $app = ObjCreate("Excel.application")
    $app.Visible = true
    $open = $app.Workbooks.Open($scriptdir)

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

    ;in Excel schreiben
    $app.Cells(1,1).Value = @MDAY &"." & @MON &"." &@YEAR & " um " & @HOUR &":" &@MIN &"Uhr"
    For $i = 1 To UBound($template) -1
    $app.Cells(2,$i).Value = $template[$i][1]
    Next

    [/autoit]