IniRead & IniWrite wollen nicht so wie ich

  • Bei einem meiner Projekte möchten eine Funktion nicht so, wie drei gleiche Funktionen. Deshalb bin
    ich von einem einem Anwenderfehler ausgegangen was bei A geht muss in seber Kombination
    auch in B gehen. Anscheinend stehe ich
    auf der Leitung oder mein Autoit hat einen Bug.

    Mein Script liest einen Titel von einer Webseite und vergleicht diesen mit
    einem alten Eintrag den es sich in einer Ini gespeichert hat. Wenn der Titel ungleich
    dem ini Eintrag ist informiert es mich über ein Traytip und schreibt den neuen
    Titel in die Ini.

    Wenn ich mir die Ini anschaue stelle ich fest, dass der alte Eintrag nicht wie
    normalerweise überschrieben wird, sondern der neue Eintrag angehängt wird. Deshalb
    erkennt des Script bei jedem durchlauf eine Ungleichheit.
    Mein Iniread versucht die ini auszulesen. Doch die variable ist immer leer. Nicht
    einmal der Default wert steht drin.

    Ich hoffe ihr könnt mir folgen und dieses Problem nachstellen.

    Vielen Dank an alle die sich die Zeit nehmen
    MFG Salkin


    [autoit]

    #include <INet.au3>
    #Include <String.au3>
    #include <Array.au3>

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

    $IniPath = @ScriptDir & "/Data.ini"

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

    Local $oIE = 'http://www.der-postillon.com/'
    Local $sStart = "<h3 class='post-title entry-title' itemprop='name'>"
    Local $sEnd = '</h3>'
    Local $sQuellcode = _INetGetSource($oIE)
    Local $aQuellcode = _StringBetween($sQuellcode, $sStart, $sEnd)
    Local $aTitle = _StringBetween ($aQuellcode [0],'>','</a>')

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

    IniWrite ($IniPath, "Der-Postillon", "Latest_Title", $aTitle [0])

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

    ConsoleWrite ("Data1: "&$aTitle[0])

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

    $Title = IniRead ($IniPath, "Der-Postillon", "Latest_Title", "fehler");

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

    ConsoleWrite ("Data2: "&$Title)
    ConsoleWrite (@Crlf)

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

    Exit

    [/autoit]

    Einmal editiert, zuletzt von Salkin (29. Dezember 2013 um 20:12)

  • Hey,

    der String "Sonntagsfrage (93): Was halten Sie davon, die Wahlperiode auf 5 Jahre auszuweiten?" enthält zu viele Sonderzeichen. Konvertier alles in Binary und wieder zurück (oder gibts eine einfachere Methode?)

    [autoit]

    #include <INet.au3>
    #Include <String.au3>
    #include <Array.au3>

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

    $IniPath = @ScriptDir & "/Data.ini"

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

    Local $oIE = 'http://www.der-postillon.com/'
    Local $sStart = "<h3 class='post-title entry-title' itemprop='name'>"
    Local $sEnd = '</h3>'
    Local $sQuellcode = _INetGetSource($oIE)
    Local $aQuellcode = _StringBetween($sQuellcode, $sStart, $sEnd)
    Local $aTitle = _StringBetween ($aQuellcode [0],'>','</a>')

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

    IniWrite ($IniPath, "Der-Postillon", "Latest_Title", StringToBinary($aTitle [0]))

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

    ConsoleWrite ("Data1: "&$aTitle[0])

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

    $Title = BinaryToString(IniRead ($IniPath, "Der-Postillon", "Latest_Title", "fehler"));

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

    ConsoleWrite ("Data2: "&$Title)
    ConsoleWrite (@Crlf)

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

    Exit

    [/autoit]

    Steve

    [Blockierte Grafik: http://stefan.blagojevic.at/loading.gif]

    Design, Modellbau, CAD <3
    AutoCAD, ArchiCAD, REVIT (ist ein Scheiss, habe aber das Zertifikat)

    Cinema 4D, RuckZuck Statik Programm

    Michael Bay als Architekt


    Da eine Glasfassade! Booom Sichtbeton! Laminiertes Bild auf Mosaiksteinchen! Granit! Granit! Granit! Sichtbetonwand mit 50° Neigung!
    Holzverkleidung erscheint da! Boooooom!

  • Hi,
    kurze Stringanalyse ermittelt Linefeeds chr(10) im Text, welche man mit StringStripWS entfernt

    Spoiler anzeigen
    [autoit]

    #include <Inet.au3>
    #include <String.au3>
    #include <StringConstants.au3>

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

    $IniPath = @ScriptDir & "/Data.ini"

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

    Local $oIE = 'http://www.der-postillon.com/'
    Local $sStart = "<h3 class='post-title entry-title' itemprop='name'>"
    Local $sEnd = '</h3>'
    Local $sQuellcode = _INetGetSource($oIE)
    Local $aQuellcode = _StringBetween($sQuellcode, $sStart, $sEnd)
    Local $aTitle = _StringBetween ($aQuellcode [0],'>','</a>')

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

    for $i=1 to stringlen($atitle[0]) ;text analysieren
    $d=asc(stringmid($atitle[0],$i,1)) ;einzelne buchstaben
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $d = ' & $d & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    next

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

    ;linefeeds entfernen
    $atitle[0]=StringStripws($aTitle[0],$STR_STRIPLEADING + $STR_STRIPTRAILING + $STR_STRIPSPACES)

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

    IniWrite ($IniPath, "Der-Postillon", "Latest_Title", $aTitle [0])

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

    ConsoleWrite ("Data1: "&$aTitle[0]&@crlf)

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

    $Title = IniRead ($IniPath, "Der-Postillon", "Latest_Title", "fehler");

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

    ConsoleWrite ("Data2: "&$Title)
    ConsoleWrite (@Crlf)

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

    Exit

    [/autoit]
  • Dankeschön :thumbup:
    Ich habe Stevenx Lösung umgesetzt alles super nun.
    Zu viele Sonderzeichen :cursing: ^^ das hat mich Nerven gekostet.
    Nochmals Danke

    MFG Salkin

  • Hi,
    die "Lösung" mittels StringToBinary() ist imho alles andere als optimal!
    Sämtliche Linefeeds und ggf. auch in Zukunft auftretende Sonderzeichen werden per StringToBinary() nicht entfernt, sie sind im String enthalten und werden sicher später noch zu Ärger führen....
    Man sollte "fehlerhafte" Daten nicht durch das gesamte Programm schleppen, sondern sie direkt so aufbereiten, dass sämtliche weiteren Scriptteile damit einfach weiterarbeiten können.

    Du hast nichteinmal selbst herausgefunden, dass dein String Zeichen enthält, mit denen einige AutoItfunktionen nicht klarkommen. Glaubst du etwa, dass andere Funktionen die "Sonderzeichen" in deinem String ignorieren?

  • Hi,
    die "Lösung" mittels StringToBinary() ist imho alles andere als optimal!
    Sämtliche Linefeeds und ggf. auch in Zukunft auftretende Sonderzeichen werden per StringToBinary() nicht entfernt, sie sind im String enthalten und werden sicher später noch zu Ärger führen....
    Man sollte "fehlerhafte" Daten nicht durch das gesamte Programm schleppen, sondern sie direkt so aufbereiten, dass sämtliche weiteren Scriptteile damit einfach weiterarbeiten können.

    Du hast nichteinmal selbst herausgefunden, dass dein String Zeichen enthält, mit denen einige AutoItfunktionen nicht klarkommen. Glaubst du etwa, dass andere Funktionen die "Sonderzeichen" in deinem String ignorieren?

    Pfuu dachte es lag an den ":" und den Klammern und so... Jo solltest dann Andy hören ^^

    Steve

    [Blockierte Grafik: http://stefan.blagojevic.at/loading.gif]

    Design, Modellbau, CAD <3
    AutoCAD, ArchiCAD, REVIT (ist ein Scheiss, habe aber das Zertifikat)

    Cinema 4D, RuckZuck Statik Programm

    Michael Bay als Architekt


    Da eine Glasfassade! Booom Sichtbeton! Laminiertes Bild auf Mosaiksteinchen! Granit! Granit! Granit! Sichtbetonwand mit 50° Neigung!
    Holzverkleidung erscheint da! Boooooom!

  • Ich lass mich gerne belehren.
    Hab nun StringStripws Manchmal treten noch probleme mit Umlauten auf, aber das bekomme ich selbst gelöst.

    Vielen Dank an Andy und Stevenx
    Euch beiden und auch allen anderen einen guten Rutsch in 2014 :party:

    Gruß Salkin