1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Captain09

Beiträge von Captain09

  • Liste in TXT Datei filtern

    • Captain09
    • 1. September 2015 um 20:22

    Vielen vielen Dank!
    Das Script funktioniert wunderbar

    ich hab es noch folgendermaßen verändert:


    Code
    #include <FileConstants.au3>
    $aFiles = FileReadToArray("D:\list.txt")
    $sQuelle = "D:\p\"
    For $i = 0 To UBound($aFiles) - 1
            Do
            	$aFiles[$i] = StringReplace($aFiles[$i], "   ", "  ")
            Until @extended = 0
            $aFile = StringSplit($aFiles[$i], "  ", 3)
            ConsoleWrite("Dateiname: " & $aFile[0] & @CRLF)
            ConsoleWrite("Dateigröße: " & $aFile[1] & @CRLF)
            ConsoleWrite("Pfad zur Datei: " & $aFile[2] & @CRLF)
            FileMove($sQuelle & $aFile[0],$aFile[2] & $aFile[0], $FC_CREATEPATH)
            ConsoleWrite(" " & $sQuelle & $aFile[0] & " -> " & $aFile[2] & $aFile[0] & @CRLF)
            ConsoleWrite(@CRLF)
    Next
    Alles anzeigen


    Jetzt läuft die Rekonstruktion der Ordnerstruktur, einfach toll

    LG Captain09

  • Liste in TXT Datei filtern

    • Captain09
    • 1. September 2015 um 05:05

    Hallo liebe Programmierer,
    Ich habe ca. 350 000 Dateien erfolgreich nach einer Löschung wiederhergestellt. Leider befinden sich diese vielen Dateien alle in einem Ordner.
    Ich habe aber eine Liste, in der der ursprüngliche Pfad jeder Datei steht, die nach diesem Schema formatiert ist:
    Dateiname Dateigröße in Bytes ursprünglicher Pfad zur Datei
    hier ein kleiner Auszug:

    Code
    mt-core.js                                                    94425       P:\Dateien\wamp3\www\s2\                                      
    mt-full.js                                                    116829      P:\Dateien\wamp3\www\s2\                                      
    mt-more.js                                                    28449       P:\Dateien\wamp3\www\s2\

    Jetzt möchte ich die ganzen Dateien, die aufgelistet sind aus dem gewaltigen Ordner zu dem jeweils am Ende der Zeile angegebenen Pfad kopieren.

    Mein mini Ansatz:

    Code
    $s = FileReadToArray("D:\list.txt")

    Aber wie filtere ich jetzt die einzelnen Zeilen aus dem Array nochmal, damit ich den Dateinamen und den Pfad getrennt bekomme?

    Würde mich über Hilfe freuen :)

    LG Schweizergeizer

  • _FileListTreeToArray

    • Captain09
    • 1. Juni 2014 um 23:37
    Zitat von misterspeed
    • Da du nicht geschrieben hast woher die Funktion stammt hier der Link zum englischen Forum: http://www.autoitscript.com/forum/topic/83…reetoarray-udf/
    • Die dort herunterladbare Version funktioniert bei mir einwandfrei und liefert ein Array mit allen Dateipfaden. Allerdings werden auch Ordner ins Array aufgenommen, nicht nur Dateien. Keine Ahnung ob das für dich ok ist.
    • Die hier von dir gepostete Variante wird mit Sicherheit nicht mehr funktionieren, weil aufgrund eines Bugs im Forum sämtliche "\" durch "" ersetzt wurden. Jenachdem wo du die Funktion her hattest hast du vielleicht aufgrund dieses Bugs bereits die beschädigte Funktion heruntergeladen.
    • Wenn du nur Verzeichnisse ohne Dateien haben willst kannst du einfach [autoit]_filelisttoarray()[/autoit] nutzen und den entsprechenden Parameter für "nur Ordner" setzen. Wenn die Funktion rekursiv sein soll, also auch Unterverzeichnisse auflisten muss, dann such nach einer rekursiven Version von filelisttoarray (finden sich hier im Forum mehrere). Alternativ eben selber schreiben, was nun auch kein großer Akt wäre.

    Bei mir funktioniert es auch mit der dort verwendeten Version nicht
    Ich wäre dir sehr dankbar, wenn du deine Funktion ohne include ins Script einbaust und es hier postest

  • _FileListTreeToArray

    • Captain09
    • 31. Mai 2014 um 18:08

    darauf kommt es ja nicht mal an
    ich will nur alle dateien in unterverzeichnisen etc. aufgelistet haben :(
    kann man sich nicht per autoit nur die verzeichnisse anzeigen lassen?
    dann kann ich mir eine eigene funktion schreiben

    übrigens bei dem code hier bekomme ich immer noch nur 1 als Arraygröße raus:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <FileEx.au3>
    $a = _FileListTreeToArray(@ScriptDir)
    $iError = @error
    If IsArray($a) Then
    MsgBox(0,"","$a ist ein Array")
    MsgBox(0,"","Der Aufruf von _FileListTreeToArray verlief fehlerfrei.")
    MsgBox(0,"","Die Arraygröße von $a ist: "&UBound($a))
    else
    MsgBox(0,"","Fehler Code: " & $iError & " ... schau in der Funktion nach was das bedeutet...")
    EndIf

    [/autoit]

    hier die Funktion:

    Spoiler anzeigen
    [autoit]


    Func _FileListTreeToArray($sPath, $fRelation = 0, $sType = "", $sSort = "N")
    Local $aCheck, $vStdout, $sTemp, $sPlaceholder, $sTempSort, $vStdout, $sLine, $iCounter, $aReturn
    ; Check parameters, validate path
    $aCheck = StringLeft($sPath, 3)
    $aCheck = StringSplit($aCheck, ":")
    If $aCheck[0] <> 2 And StringLeft($sPath, 1) <> "" Then $sPath = @WorkingDir & "" & $sPath
    If $aCheck[0] <> 2 And StringLeft($sPath, 1) = "" Then $sPath = @WorkingDir & $sPath
    If StringRight($sPath, 1) = "" Then $sPath = StringTrimRight($sPath, 1)
    If Not FileExists($sPath) Then Return SetError(1, 0, 0)
    If $fRelation > 1 Or $fRelation < 0 Then Return SetError(2, 0, 0)
    $sTempSort = StringReplace($sSort, "-", "")
    If StringLen($sTempSort) <> 1 Or _
    $sTempSort <> "N" And _
    $sTempSort <> "S" And _
    $sTempSort <> "E" And _
    $sTempSort <> "D" And _
    $sTempSort <> "G" And _
    $sTempSort <> "" Then _
    Return SetError(3, 0, 0)
    If StringReplace( _
    StringReplace( _
    StringReplace( _
    StringReplace( _
    StringReplace( _
    StringReplace($sType, "-", "") _
    , "H", "") _
    , "S", ""), _
    "A", ""), _
    "R", ""), _
    "D", "") <> "" Then _
    Return SetError(4, 0, 0)
    ; Start CMD to load the tree
    If $sType = "" Then
    $vStdout = Run(@ComSpec & ' /C cd ..\..\..\..\.. & dir "' & $sPath & '" /A /B /O:' & $sSort & ' /S', @WorkingDir, @SW_HIDE, 6)
    Else
    $vStdout = Run(@ComSpec & ' /C cd ..\..\..\..\.. & dir "' & $sPath & '" /A:' & $sType & ' /B /O:' & $sSort & ' /S', @WorkingDir, @SW_HIDE, 6)
    EndIf
    ; Get data via Stdout
    While 1
    $sLine = StdoutRead($vStdout)
    If @error Then ExitLoop
    If $sLine <> "" Then $sTemp &= $sLine
    WEnd
    ; Create Placeholder for hole string
    For $iCounter = 0 To StringLen($sTemp)
    $sPlaceholder &= " "
    Next
    ; Convert string from extended Ascii to Ansi
    $sTemp = DllCall("user32.dll", "long", "OemToChar", "str", $sTemp, "str", $sPlaceholder)
    $sPlaceholder = ""
    If Not IsArray($sTemp) Or $sTemp[0] < 1 Then Return SetError(5, 0, 0)
    $sTemp = $sTemp[2]
    ; Format finally
    $sTemp = StringReplace($sTemp, @CRLF, @LF)
    $sTemp = StringReplace($sTemp, @CR, @LF)
    If StringRight($sTemp, 1) = @LF Then $sTemp = StringTrimRight($sTemp, 1)
    If StringLeft($sTemp, 1) = @LF Then $sTemp = StringTrimLeft($sTemp, 1)
    If Not StringInStr($sTemp, @LF) Then
    If $sTemp = "" Then
    Local $aReturn[1] = [0]
    Else
    Local $aReturn[2] = [1, $sTemp]
    EndIf
    Else
    Local $aReturn = StringSplit($sTemp, @LF)
    EndIf
    If Not IsArray($aReturn) Then
    Return SetError(5, 0, 0)
    EndIf
    ; If relative path is chosen edit the paths
    If $fRelation = 1 Then
    For $iCounter = 1 To $aReturn[0] Step 1
    $aReturn[$iCounter] = StringReplace($aReturn[$iCounter], $sPath & "", "")
    Next
    EndIf
    ; Return array
    Return SetError(0, 0, $aReturn)
    EndFunc ;==>_FileListTreeToArray

    [/autoit]
  • _FileListTreeToArray

    • Captain09
    • 31. Mai 2014 um 13:21

    Ich habe den Code etwas angepasst, aber nach wie vor keine Ahnung warum es keinen Array zurückgibt UND @error nicht setzt.
    Wenn ich die Funktion richtig interpretiert habe, ruft man sie genau wie _FileListToArray auf, kann aber optional noch zusätzlich Parameter übergeben.

    [autoit]


    #include <Array.au3>
    #include <FileEx.au3>
    $a = _FileListTreeToArray(@ScriptDir)
    If @error Then
    MsgBox(0,"","Fehler")
    Else
    MsgBox(0,"","Der Aufruf von _FileListTreeToArray verlief fehlerfrei.")
    EndIf
    If IsArray($a) Then
    MsgBox(0,"","$a ist ein Array")
    EndIf
    MsgBox(0,"","Die Arraygröße von $a ist: "&_ArrayMaxIndex($a))

    [/autoit]
  • _FileListTreeToArray

    • Captain09
    • 30. Mai 2014 um 22:13

    Hallo,
    ich versuche seit einer Ewigkeit vergeblich den Befehl _FileListTreeToArray zum Laufen zu bekommen.
    Hier ein Beispielscript:

    [autoit]


    #include <Array.au3>
    #include <FileEx.au3>
    $a = _FileListTreeToArray(@ScriptDir)
    MsgBox(0,"",$a)
    MsgBox(0,"",_ArrayMaxIndex($a))
    MsgBox(0,"",@error)

    [/autoit]

    Bei der ersten MsgBox bekomme ich nichts raus und bei den zwei danach 0

    Wo ist mein Fehler?
    LG
    Captain09

    edit:
    gelöst,
    Ich habe @ComSpec durch cmd.exe ersetzt, so klappt der Aufruf

  • Prüfen ob sich 2 Grafiken überlagern

    • Captain09
    • 18. Mai 2014 um 18:51

    Fehler gefunden
    habe statt $pos2 $pos geschrieben

  • Prüfen ob sich 2 Grafiken überlagern

    • Captain09
    • 18. Mai 2014 um 15:00

    Mit dem Rectangle komme ich überhaupt nicht zurecht,
    ich habs jetzt mal als eindimensionale Überlappung versucht, aber es funktioniert nicht,
    habe ich irgendwo einen Denkfehler?

    [autoit]


    $pos = ControlGetPos($Form1,"",$Pic1) ;Grafik a
    $x = $pos[0] ;Entfernung von Links
    $y = $pos[1] ;Entfernung von Oben
    $w = $pos[2] ;Breite
    $h = $pos[3] ;Höhe
    $w1 = $w*(1-($k-1)) ;Breite schmälern
    $w2 = $h*(1-($k-1)) ;Höhe schmälern
    $w3 = $w*$k ;verbreitern
    $w4 = $h*$k ;vergrößern
    $pos2 = ControlGetPos($Form1,"",$Pic5) ;Grafik B
    $x2 = $pos[0] ;Entfernung von Links
    $y2 = $pos[1] ;Entfernung von Oben
    $ww = $pos[2] ;Breite
    $hh = $pos[3] ;Höhe
    If (($x < $x2) And (($x + $w) > $x2)) Or (($x2 < $x) And (($x2 + $ww) > $x)) Then
    MsgBox(0,"Treffer","Die beiden Grafiken überlagern sich",1)
    Exit
    EndIf

    [/autoit]
  • Prüfen ob sich 2 Grafiken überlagern

    • Captain09
    • 18. Mai 2014 um 14:12

    Hallo,
    ich möchte gerne prüfen, ob sich 2 Grafiken überlagern:

    [autoit]


    $pos = ControlGetPos($Form1,"",$Pic1) ;Grafik A
    $x = $pos[0] ;Entfernung von Links
    $y = $pos[1] ;Entfernung von Oben
    $w = $pos[2] ;Breite
    $h = $pos[3] ;Höhe
    $w1 = $w*(1-($k-1)) ;Breite schmälern
    $w2 = $h*(1-($k-1)) ;Höhe schmälern
    $w3 = $w*$k ;verbreitern
    $w4 = $h*$k ;vergrößern
    $pos2 = ControlGetPos($Form1,"",$Pic5) ;Grafik B
    $x2 = $pos[0] ;Entfernung von Links
    $y2 = $pos[1] ;Entfernung von Oben
    $ww = $pos[2] ;Breite
    $hh = $pos[3] ;Höhe

    [/autoit]

    Wie muss ich das jetzt ansetzen?
    ich muss prüfen ob sich 4 Werte überlappen, aber ich weiß einfach nicht wie ichs anstellen soll :(
    Hoffentlich kann mir jemand helfen
    LG
    Captain09

  • Möglichkeiten beim Umstellen eines eingegebenen Strings ausgeben

    • Captain09
    • 13. Mai 2014 um 13:57

    Hallo,
    ich möchte, dass ein String umgestellt wird und mir jede erdenkliche Reihenfolge der Inhalte des Strings ausgegeben wird.
    Bsp: "123":
    "123"
    "132"
    "213"
    "231"
    "312"
    "321"
    Wie funktioniert das?
    (Ich habe sowas noch nie gemacht)
    LG
    Captain09

  • SQLite db auslesen

    • Captain09
    • 11. Mai 2014 um 19:03
    Zitat von misterspeed

    Falls es tatsächlich Strings sein sollten müsstest du deinen Vergleich in der WHERE Klausel eben auf LIKE umstellen:


    SQL
    SELECT * From Tabelle WHERE Nummer LIKE '000002'

    JA MANN!
    ES FUNKTIONIERT!
    SO MUSS DAS SEIN!
    DANKE SCHÖN! :D

  • SQLite db auslesen

    • Captain09
    • 11. Mai 2014 um 15:56

    Es liegt eindeutig am WHERE
    hat jemand ein Beispielscript für die Selektierung eines SQLite Datenbankeintrags mit WHERE?
    wäre echt super
    LG
    Captain09

  • SQLite db auslesen

    • Captain09
    • 11. Mai 2014 um 14:00

    Hallo,
    ich habe eine kleine SQLite Datenbank, in die ich Informationen von Person abspeichere.
    Auslesen kann ich sie auch, aber bei der Filterung scheitert es:

    [autoit]


    #include <SQLite.au3>

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

    _SQLite_StartUp()
    $hDB = _SQLite_Open("Leser.db")
    _SQLite_Exec ($hDB, "INSERT INTO Tabelle (Nummer,Nachname,Vorname,Adresse,Telefonnummer) VALUES ('000002','Mustermann','Moritz','Hauptstraße 5','12345 67890');")
    Local $hQuery,$aRow
    _SQLite_Query($hDB, "SELECT * From Tabelle WHERE Nummer = 000002",$hQuery)
    _SQLite_FetchData ($hQuery, $aRow)
    $x = ""
    For $i = 0 To UBound($aRow)-1
    $x &= " "&$aRow[$i]
    Next
    MsgBox(0x40,"[INFO]",$x)

    [/autoit]

    Ich bekomme eine leere MsgBox zurück, wo liegt mein Fehler?
    LG
    Captain09

  • ComboBox manuelle Eingabe verhindern

    • Captain09
    • 11. Mai 2014 um 12:51
    Zitat von Oscar

    Hier ein Beispiel, wie misterspeed und James es gemeint haben:

    Spoiler anzeigen
    [autoit]


    #include
    #include
    #include

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

    Global $hGui = GUICreate('Test', 240, 100)
    Global $idCombo = GUICtrlCreateCombo('', 10, 10, 220, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL, $WS_VSCROLL))
    GUICtrlSetData(-1, 'Test1|Test2|Test3|Test4|Test5|Test6|Test7', 'Test4')
    Global $idEdit = GUICtrlCreateInput('', 10, 60, 220, 20)
    GUICtrlSetData(-1, GUICtrlRead($idCombo))
    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idCombo
    GUICtrlSetData($idEdit, GUICtrlRead($idCombo))
    EndSwitch
    WEnd

    [/autoit]
    Alles anzeigen

    Perfekt!
    Genau so hatte ich mir das gedacht :D
    Vielen vielen Dank Euch allen
    LG
    Captain09

  • ComboBox manuelle Eingabe verhindern

    • Captain09
    • 11. Mai 2014 um 02:53

    Beides bringt nichts,
    eingeben kann man immer noch, nur kann man nicht mehr auswählen
    ich wollte es anders herum :(

  • ComboBox manuelle Eingabe verhindern

    • Captain09
    • 10. Mai 2014 um 19:48

    Hallo,
    Wie kann man dafür sorgen, dass man in eine ComboBox nichts mehr eingeben kann, sondern nur Punkte auswählen kann?
    LG
    Captain09

  • Bilder Darstellung/Verwaltung

    • Captain09
    • 5. April 2014 um 03:27

    Hallo,
    ich möchte eine große Menge an Bildern (ca. 800 Stück) durchschauen und spezielle einfach aussortieren, dazu hatte ich mir folgendes überlegt:
    Zuerst die ganze Bildermenge in dem Ordner erfassen, und nichts doppelt überprüft wird, eine Liste erstellen lassen.
    Eine Obefläche, die den ganzen Bildschirm einnimmt zeigt das Bild an und links unten befinden sich 2 Buttons Weiter und Löschen.
    Bei Weiter wird das Bild aus der Liste gestrichen/ das nächste Bild angezeigt.
    Bei Löschen wird das Bild gelöscht und das nächste angezeigt.
    Wenn mir jemand das komplette Script machen möchte wäre das super,
    ansonsten bin ich schon für ein paar Ansätze, wie ich das alles realisieren kann überaus dankbar.
    LG
    Captain09

  • Tetris

    • Captain09
    • 26. Februar 2014 um 17:03

    ich habe den quellcode etwas modifiziert,
    probiert es mal aus :)

  • Tetris

    • Captain09
    • 25. Februar 2014 um 17:11
    Zitat von BiNu

    SCORE 490 xD

    Also hab das jetzt nur 3 mal gespielt und hat mit deinem Problem nix zu tun aber da sind zum teil schwebende imaginäre Blöcke. Die haben keine Wirkung die andern fallen einfach durch die hindurch und z.t. "putzen" die sie weg.

    Nach Game Over > Neustart bleibt manchmal der Game Over Balken/Schrift vor dem Spielfeld.

    und manchmal crasht es einfach spontan mit

    ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    GUICtrlSetBkColor($g_lblGameBoard[$g_nShapeX+$i][$g_nShapeY+$j], $g_aGameShape[$i][$j])
    GUICtrlSetBkColor(^ ERROR

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Alles anzeigen

    ööööhm xD
    ich bin überfragt :D

  • Tetris

    • Captain09
    • 23. Februar 2014 um 02:56
    Zitat von Make-Grafik

    Sorry, bei so einem langen Code lese ich mich nicht großartig ein. ^^
    Ich gebe dir mal einen Ansatz bzw. Idee um dir selber die Features noch zu programmieren.

    Versuch deine Steine die rechts angezeigt werden in ein Array zu speichern.
    [0] = Anzeige Stein 1
    [1] = Anzeige Stein 2
    [2] = Anzeige Stein 3
    [3] = Gespeicherter Stein

    Nun brauchst du nur noch folgendes zu machen:

    Ist der Aktuelle Stein unten, dann holst du Element [0] heraus und verschiebst [1] nach [0] und [2] nach [1]. In [2] kannst du einen neuen Stein generieren.

    Wird die Shift Taste gedrückt, tauscht du einfach den Inhalt von [0] und [3] aus. Das setzt aber voraus, dass du einen zufälligen Stein vor Beginn in die Ablage generierst.


    Der Code dazu ist nicht alt zu schwierig. Ich weiß nicht wie du es in deinem Skript hast, aber so würde ich das Problem lösen.

    Alles anzeigen

    Vielen Dank, das ist eine große Hilfe :)
    Jetzt muss ich das nurnoch umsetzten, aber mit etwas Zeit schaffe ich das hoffentlich :S

    LG
    Captain09

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™