_FileWriteFromArray

  • Hi @ all,

    habe gerade den Tipp (wusste nicht, wie man ein Array in eine Datei schreibt) von peethebee probiert, allerdings verstehe ich noch nicht, wieso er mir viel zu viel in die Datei reinschreibt, eigentlich sollte es nur eine Url zu einem Bild sein.

    Sourcecode:

    Spoiler anzeigen
    [autoit]


    ;--- AutoIt ImageBeaver Download Script by .kim -----------
    ;--- Special thanks to peethebee, progandy and BugFix ---
    #include <INET.au3>
    #include <String.au3>
    #include <File.au3>
    #include <Array.au3>
    #include <Constants.au3>

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

    HotKeySet("+!e", "Terminate")
    $traytip = True
    If $CmdLine[$CmdLine[0]] == "-silent" Then $traytip = False

    Dim $ic_url, $c_url, $sGallery, $eGallery, $aGallery, $dir, $c_file, $sStart, $sStop, $bilder, $source; Deklaration der Variablen
    Dim $IniFile
    $IniFile = @ScriptDir & '\index.ini' ; INI Datei-Pfad

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

    $ic_url = "http://www.imagebeaver.com/view.php?mode=gallery&g=" ;Anfangsurl ohne Gallery Nr.

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

    If FileExists($IniFile) Then
    If IniRead($IniFile, "Aktuell", "aktuell", Default) <= 0 Then _
    $sGallery = IniRead($IniFile, "Start", "start", Default) ; Startgallery Nr. auslesen
    $eGallery = IniRead($IniFile, "Ende", "ende", Default) ; Endgallery Nr. auslesen
    $aGallery = IniRead($IniFile, "Aktuell", "aktuell",Default) +1 ; Aktuelle Gallery Nr. auslesen
    $path = IniRead($IniFile, "Path", "root",Default) ; Pfad auslesen

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

    If ($traytip = True) Then TrayTip("Imagebeaver Downloader", "Downloading Images from Gallery Nr. "& $aGallery & " to Nr. " & $eGallery & @CRLF & "Abbruch mit [SHIFT]-[ALT]-[e]", 5, 1)
    TraySetToolTip("Imagebeaver Downloader" & @CRLF & @CRLF & "Downloading Images from Gallery Nr. "& $aGallery & " to Nr. " & $eGallery & @CRLF & "Abbruch mit [SHIFT]-[ALT]-[e]")
    Sleep(1000)

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

    While $aGallery <= $eGallery ; Abbruchbedingung der While-Schleife
    If $traytip = True Then TrayTip("Imagebeaver Downloader", "Gallery Nr." & $aGallery , 1,16)

    $dir= $path & "gallery_"&$aGallery &"\"

    $c_file = $dir & "gallery_"& $aGallery &".html" ; Datei + Pfad in die der Quelltext gespeichert werden soll

    $c_url = $ic_url&$aGallery ; Zusammenfügen der URL
    $source = _INetGetSource( $c_url ) ; Holen des Quellcodes

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

    $sStart= '<img src="' ; Startbedingung für Ausschneiden
    $sStop = '" border="0"></a> ' ; Abbruchbedingung für ausschneiden
    $bilder = _StringBetween($source, $sStart, $sStop) ;Füllen des Arrays mit dem gesuchten Wert

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

    For $i = 0 To UBound($bilder)-1
    $bilder[$i] = StringReplace($bilder[$i],"/t/","/i/",1,1) ; Tauschen von Thumbnail to image
    Next

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

    For $i = 0 To UBound($bilder)-1
    $bilder[$i] = StringReplace($bilder[$i],"/images/thumb/","/images/",1,1) ; Tauschen von Thumbnail to image
    Next

    If Not @error Then
    DirCreate($dir) ; Erstellt Ordner mit Gallerynummer
    For $i = 0 To UBound($bilder)-1
    InetGet ($bilder[$i],$dir & 'gallery_' & $aGallery & '_picture_' & $i &'.jpg') ; Downloaden der Bilder
    Next

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

    InetGet($c_url, $c_file) ; Schreibt Sourcecode in Datei
    EndIf
    If $traytip = True Then TrayTip("","",0)
    IniWrite($IniFile, 'Aktuell', 'aktuell', $aGallery) ; Abspeichern der aktuellen Gallery
    $aGallery = $aGallery + 1 ; Schritt zur nächsten Gallery

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

    WEnd

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

    $ende = IniRead($IniFile, "Ende", "ende", Default)
    IniWrite($IniFile, 'Aktuell', 'aktuell', $ende)
    MsgBox(4096,"Finished","Download finished",10)

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

    EndIf

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

    Func Terminate()
    Exit 0
    EndFunc

    [/autoit]

    Die index.ini Datei (muss bei dem Script im Ordner liegen):

    Spoiler anzeigen
    [autoit]


    [Start]
    start = 0

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

    [Ende]
    ende = 0

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

    [Aktuell]
    aktuell = 0

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

    [Path]
    root=C:\Pfad\

    [/autoit]

    Edit:
    1. Problem gelöst, ich lösche einfach Array[0] und schon ist der nicht benötigte Part draußen.
    2. Problem gelöst, /t/ durch /i/ in der Url ersetzt
    3. Problem gelost, es wird kein Ordner mehr erstellt, wenn eine Gallery kein Bild enthält und das Script steigt dank der Überprüfung auch nicht mehr aus.
    4. Problem gelöst und INI Datei für Start Stop Aktuelle Gallery und Speicherpfad angelegt

    Programm ist fertig, werde noch ein Gui und einen Installer dafür basteln und dann das Programm hier releasen. Vielen Dank an peethebee, progandy und BugFix für die tatkräftige Unterstützung! Geiles Forum und super nette Leute *RESPECT* macht weiter so

    MfG
    .kim

    Edit BugFix: Code-Tags gesetzt

    9 Mal editiert, zuletzt von .kim (16. September 2007 um 22:45)

  • Das geht so:

    [autoit]

    _ArrayDelete ($bilder, $bilder[0])

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

    ; /t/ mit /i/ ersetzen:
    For $i = 0 To UBound($bilder)-1
    $bilder[$i] = StringReplace($bilder[$i],"/t/","/i/",1,1)
    Next
    ; t mit i Ende

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

    _FileWriteFromArray($c_file2,$bilder) ; Schreibt Array in Datei

    [/autoit]
    • Offizieller Beitrag
    Zitat

    Neues Problem aufgetaucht: Wie kann ich verhindern, dass wenn ein Array nicht gefüllt wird, da eine Gallery keine Bilder enthält, dass er keinen Fehler bringt, sondern zur nächsten Gallery springt?

    Wenn nichts da ist, bringt die Funktion _StringBetween einen Fehler.

    Also den Folgecode nur ausführen wenn kein Fehler: If Not @error Then ...

    • Offizieller Beitrag

    So sollte das auch mit INI-Eintrag klappen.
    Wenn alles abgearbeitet wird, wird 0 in die INI geschrieben, sonst die zuletzt bearbeitete Gallery-Nr.
    Beim Start wird geprüft ob anderer Wert als 0 vorhanden. Wenn ja wird dieser +1 der neue Startwert.

    Spoiler anzeigen
    [autoit]

    ;--- AutoIt ImageBeaver Download Script ---
    #include <INET.au3>
    #include <String.au3>
    #include <File.au3>
    #include <Array.au3>
    #include <_INetGetImage.au3>
    Dim $ic_url, $c_url, $gallery = 0, $dir, $c_file, $sStart, $sStop, $bilder, $source; Deklaration der Variablen
    Dim $IniFile = 'Pfad der INI-Datei' ; ###### Pfad setzen

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

    If FileExists($IniFile) Then
    If IniRead($IniFile, 'gallery', 'last') <> 0 Then _
    $gallery = IniRead($IniFile, 'gallery', 'last') +1
    EndIf
    If $gallery = 0 Then $gallery = "44000" ; Gallery Nr. Startwert, wenn kein Eintrag in INI
    $ic_url = "http://www.imagebeaver.com/view.php?mode=gallery&g=" ;Anfangsurl ohne Gallery Nr.

    While $gallery <= 44444 ; Abbruchbedingung der While-Schleife
    $dir= "c:\imagebeaver2\"& "gallery_"&$gallery &"\"
    $c_url = $ic_url&$gallery ; Zusammenfügen der URL
    $source = _INetGetSource( $c_url ) ; Holen des Quellcodes
    $c_file = $dir & "gallery_"& $gallery &".html" ; Datei + Pfad in die der Quelltext gespeichert werden soll
    $sStart= '<img src="' ; Startbedingung für Ausschneiden
    $sStop = '" border="0"></a> ' ; Abbruchbedingung für ausschneiden
    $bilder = _StringBetween($source, $sStart, $sStop) ;Füllen des Arrays mit dem gesuchten Wert
    For $i = 0 To UBound($bilder)-1
    $bilder[$i] = StringReplace($bilder[$i],"/t/","/i/",1,1) ; Tauschen von Thumbnail to image
    Next
    For $i = 0 To UBound($bilder)-1
    $bilder[$i] = StringReplace($bilder[$i],"/images/thumb/","/images/",1,1) ; Tauschen von Thumbnail to image
    Next
    If Not @error Then
    DirCreate("c:\imagebeaver2\"& "gallery_"&$gallery) ; Erstellt Ordner mit Gallerynummer
    For $i = 0 To UBound($bilder)-1
    InetGet ($bilder[$i],$dir & $i &'.jpg') ; Downloaden der Bilder
    Next
    InetGet($c_url, $c_file) ; Schreibt Sourcecode in Datei
    IniWrite($IniFile, 'gallery', 'last', $gallery)
    EndIf
    $gallery = $gallery + 1 ; Schritt zur nächsten Gallery
    WEnd
    IniWrite($IniFile, 'gallery', 'last', 0) ; alles abgearbeitet

    [/autoit]
  • Ich habe mal ein paar Traytips eingefügt, die man über den Kommandozeilenschalter -silent abstellen kann. Mit [SHIFT]-[ALT]-[e] kann beendet werden

    Spoiler anzeigen
    [autoit]

    ;--- AutoIt ImageBeaver Download Script ---
    #include <INET.au3>
    #include <String.au3>
    #include <File.au3>
    #include <Array.au3>
    ;#include <_INetGetImage.au3>
    #Include <Constants.au3>

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

    HotKeySet("+!e", "Terminate")
    $traytip = True
    If $CmdLine[$CmdLine[0]] == "-silent" Then $traytip = False
    Dim $ic_url, $c_url, $gallery = 0, $dir, $c_file, $sStart, $sStop, $bilder, $source; Deklaration der Variablen
    Dim $IniFile = 'Pfad der INI-Datei' ; ###### Pfad setzen
    If $IniFile = 'Pfad der INI-Datei' Then $IniFile = "c:\imagebeaver2\lastfile.ini"

    If FileExists($IniFile) Then
    If IniRead($IniFile, 'gallery', 'last', 0) <> 0 Then _
    $gallery = IniRead($IniFile, 'gallery', 'last','') +1
    EndIf
    If $gallery = 0 Then $gallery = "44000" ; Gallery Nr. Startwert, wenn kein Eintrag in INI
    $ic_url = "http://www.imagebeaver.com/view.php?mode=gallery&g=" ;Anfangsurl ohne Gallery Nr.
    If ($traytip = True) Then TrayTip("Imagebeaver Downloader", "Downloading Images from Gallery Nr. "& $gallery & " to Nr. 44444" & @CRLF & "Abruch mit [SHIFT]-[ALT]-[e]", 5, 1)
    TraySetToolTip("Imagebeaver Downloader" & @CRLF & @CRLF & "Downloading Images from Gallery Nr. "& $gallery & " to Nr. 44444" & @CRLF & "Abruch mit [SHIFT]-[ALT]-[e]")
    Sleep(1000)

    While $gallery <= 44444 ; Abbruchbedingung der While-Schleife
    If $traytip = True Then TrayTip("Imagebeaver Downloader", "Gallery Nr." & $gallery , 1,16)
    $dir= "c:\imagebeaver2\"& "gallery_"&$gallery &"\"
    $c_url = $ic_url&$gallery ; Zusammenfügen der URL
    $source = _INetGetSource( $c_url ) ; Holen des Quellcodes
    $c_file = $dir & "gallery_"& $gallery &".html" ; Datei + Pfad in die der Quelltext gespeichert werden soll
    $sStart= '<img src="' ; Startbedingung für Ausschneiden
    $sStop = '" border="0"></a> ' ; Abbruchbedingung für ausschneiden
    $bilder = _StringBetween($source, $sStart, $sStop) ;Füllen des Arrays mit dem gesuchten Wert
    For $i = 0 To UBound($bilder)-1
    $bilder[$i] = StringReplace($bilder[$i],"/t/","/i/",1,1) ; Tauschen von Thumbnail to image
    $bilder[$i] = StringReplace($bilder[$i],"/images/thumb/","/images/",1,1) ; Tauschen von Thumbnail to image
    Next
    If Not @error Then
    DirCreate("c:\imagebeaver2\"& "gallery_"&$gallery) ; Erstellt Ordner mit Gallerynummer
    For $i = 0 To UBound($bilder)-1
    InetGet ($bilder[$i],$dir & $i &'.jpg') ; Downloaden der Bilder
    Sleep(10)
    Next
    InetGet($c_url, $c_file) ; Schreibt Sourcecode in Datei
    IniWrite($IniFile, 'gallery', 'last', $gallery)
    EndIf
    If $traytip = True Then TrayTip("","",0)
    $gallery = $gallery + 1 ; Schritt zur nächsten Gallery
    WEnd
    IniWrite($IniFile, 'gallery', 'last', 0) ; alles abgearbeitet

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

    Func Terminate()
    Exit 0
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von progandy (16. September 2007 um 16:59)