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. BugFix

Beiträge von BugFix

  • Neueste Dokumente kopieren

    • BugFix
    • 11. Mai 2009 um 15:48
    Zitat von jmewald

    ich versuche mit StringRegExp nach folgendem Muster zu suchen und zwar:
    -[Zahl 0-9][Zahl 0-9].doc --> also z.B. W-81734-34.doc (-34.doc)


    Das wäre das passende Pattern dazu: "W-\d+-\d+\.doc"

    Bei der Lösung zum Finden der Doppel bin ich (anhand der Musterdatei) davon ausgegangen, dass neuere Versionsinformationen immer am Dateianfang eingefügt werden.
    Falls die Möglichkeit besteht, dass mehr als 2 gleiche Dateien auftauchen und diese irgendwo in der Datei eingeschrieben werden, müßte man zweistufig sortieren, um definitiv die jüngste Datei zu erwischen. Vielleicht sogar generell der bessere Weg. Vielleicht erstelle ich diese Lösung mal noch. ;)

    Edit:
    Habe die Lösung mal abgeändert mit mehrstufiger Sortierung. Nun können beliebig viele Dateien derselben Version irgendwo in der Datei stehen: Es wird nur die neueste rausgefischt. ;)

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>
    #include <SQLite.au3>
    #include <SQLite.dll.au3>

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

    Global $path = @ScriptDir & '\test_x.txt'
    Global $aFile, $tmpSplit, $aSplit[_FileCountLines($path)][3], $aIndexDelete[1] = [-1]
    _FileReadToArray($path, $aFile) ; Textdatei in Array einlesen, jede Textzeile in einem Element
    If @error Then Exit MsgBox(0, 'Fehler', 'Datei konnte nicht eingelesen werden')

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

    ; gesamten Dateiinhalt in einem 2D-Array ($aSplit) darstellen
    For $i = 1 To UBound($aFile) -1
    $tmpSplit = StringSplit($aFile[$i], ',', 2)
    If @error Then ContinueLoop ; falls Leerzeile
    For $j = 0 To 2
    $aSplit[$i-1][$j] = $tmpSplit[$j]
    Next
    Next
    ;~ _ArrayDisplay($aSplit, 'unsortiert')

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

    ; sortieren nach Version und innerhalb der Version nach Datum
    _Array2DSortFree($aSplit, "1|1,2|1")
    ;~ _ArrayDisplay($aSplit, 'sortiert 2-stufig')

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

    ; bei mehrfacher Versionsnummer die älteren zum Löschen vormerken
    Local $new = -1
    For $i = 0 To UBound($aSplit) -1
    If $aSplit[$i][1] <> $new Then
    $new = $aSplit[$i][1]
    Else ; jedes weitere Vorkommen ist aufgrund der Sortierung älter ==> Löschen
    If $aIndexDelete[UBound($aIndexDelete)-1] <> -1 Then ReDim $aIndexDelete[UBound($aIndexDelete)+1]
    $aIndexDelete[UBound($aIndexDelete)-1] = $i
    EndIf
    Next
    ;~ _ArrayDisplay($aIndexDelete)

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

    ; anhand der Lösch-Indexe die Einträge im Array löschen, ABER rückwärts, da sonst die Indexe nicht mehr stimmen!
    For $i = UBound($aIndexDelete) -1 To 0 Step -1
    _ArrayDelete($aSplit, $aIndexDelete[$i])
    Next
    ;~ _ArrayDisplay($aSplit, 'bereinigt')

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

    ; zurückschreiben in Datei
    Local $strWrite = ''
    For $i = 0 To UBound($aSplit) -1
    For $j = 0 To 2
    $strWrite &= $aSplit[$i][$j] & ','
    Next
    $strWrite = StringTrimRight($strWrite, 1) & @CRLF
    Next
    Local $fh = FileOpen($path, 2)
    FileWrite($fh, StringTrimRight($strWrite, 2))

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

    ;==================================================================================================
    ; Function Name: _Array2DSortFree($ARRAY, $sCOL_ASC [, $NUM=False])
    ; Description:: Sortierung von 1D/2D-Arrays nach freier Wahl
    ; 1D Sortierung Auf- oder Absteigend
    ; 2D mehrstufige Sortierung, Reihenfolge und Sortier-
    ; richtung (je Spalte) frei wählbar
    ; auch einzelne Spalte sortierbar
    ; Parameter(s): $ARRAY Das zu sortierende Array
    ; $sCOL_ASC String mit Sortierangaben "Spalte|Richtung [, Spalte|Richtung]"
    ; zu sortierende Spalte (0-Index)|Richtung (0-Asc, 1-Desc)
    ; z.B. Spalte 2 aufsteigend und in 2 absteigend Spalte 1
    ; _Array2DSortFree($ar2Sort, '1|0,0|1')
    ; optional $NUM "False" sortiert alphabetisch (Standard), "True" sortiert numerisch
    ; Return Value(s): Erfolg 0
    ; Fehler 1 Set Error 1 $ARRAY ist kein Array
    ; 2 1D-Array, aber Spaltenangabe für 2D
    ; 3 SQL-Fehler
    ; 4 Angaben für Spalte|Sortierrichtung fehlerhaft
    ; Requirements: #include <SQLite.au3>
    ; #include <SQLite.dll.au3>
    ; #include <Array.au3>
    ; Note: Es ist dringend erforderlich, die SQLite-Includes am Beginn des aufrufenden
    ; Skriptes auszuführen. Anderenfalls schlägt die Initialisierung der SQLite.dll
    ; durch _SQLite_Startup() fehl.
    ; Version: 3.3.0.0
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    #include-once
    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    #include <Array.au3>
    Func _Array2DSortFree(ByRef $ARRAY, $sCOL_ASC, $NUM=False)
    If Not IsArray($ARRAY) Then Return SetError(1,0,1)
    Local $tableStr = "CREATE TABLE [tblTEST] ("
    Local $insertStr = '', $insertBase = "INSERT INTO tblTEST VALUES ("
    Local $sortOrder = '', $sortStr = "SELECT * FROM tblTEST ORDER BY "
    Local $aResult, $asc, $iRows, $iCol
    $sCOL_ASC = StringStripWS($sCOL_ASC, 8)
    Local $ub2nd = UBound($ARRAY, 2)
    If @error = 2 Then
    If (StringLen($sCOL_ASC) > 3) Or (StringLeft($sCOL_ASC, 1) <> '0') Then Return SetError(2,0,1)
    If StringRight($sCOL_ASC, 1) = 0 Then
    _ArraySort($ARRAY)
    Else
    _ArraySort($ARRAY, 1)
    EndIf
    Return 0
    Else
    Local $aOut[UBound($ARRAY)][$ub2nd]
    EndIf
    _SQLite_Startup ()
    If @error > 0 Then Return SetError(3,0,1)
    $hSQL = _SQLite_Open ()
    If @error > 0 Then
    _SQLite_Shutdown ()
    Return SetError(3,0,1)
    EndIf
    For $i = 0 To UBound($ARRAY, 2) -1
    $tableStr &= "'field" & $i & "',"
    Next
    $tableStr = StringTrimRight($tableStr, 1) & ");"
    For $i = 0 To UBound($ARRAY) -1
    $insertStr &= $insertBase
    For $k = 0 To UBound($ARRAY, 2) -1
    $insertStr &= "'" & $ARRAY[$i][$k] & "',"
    Next
    $insertStr = StringTrimRight($insertStr, 1) & ");"
    Next
    If _SQLite_Exec ( $hSQL, $tableStr & $insertStr ) <> $SQLITE_OK Then
    _SQLite_Shutdown ()
    Return SetError(3,0,1)
    EndIf
    If StringInStr($sCOL_ASC, ',') Then
    Local $aOrder = StringSplit($sCOL_ASC, ',')
    For $i = 1 To UBound($aOrder) -1
    If StringInStr($sCOL_ASC, '|') Then
    Local $var = StringSplit($aOrder[$i], '|')
    $asc = ' ASC'
    If $var[2] = 1 Then $asc = ' DESC'
    If $NUM Then
    $sortOrder &= 'ABS(field' & $var[1] & ')' & $asc & ','
    Else
    $sortOrder &= 'field' & $var[1] & $asc & ','
    EndIf
    Else
    _SQLite_Shutdown ()
    Return SetError(4,0,1)
    EndIf
    Next
    $sortOrder = StringTrimRight($sortOrder, 1) & ';'
    Else
    If (StringLen($sCOL_ASC) > 2) And (StringInStr($sCOL_ASC, '|')) Then
    Local $var = StringSplit($sCOL_ASC, '|')
    $asc = ' ASC'
    If $var[2] = 1 Then $asc = ' DESC'
    If $NUM Then
    $sortOrder &= 'ABS(field' & $var[1] & ')' & $asc
    Else
    $sortOrder &= 'field' & $var[1] & $asc
    EndIf
    Else
    _SQLite_Shutdown ()
    Return SetError(4,0,1)
    EndIf
    EndIf
    If _SQLite_GetTable2d ( $hSQL, $sortStr & $sortOrder, $aResult, $iRows, $iCol ) <> $SQLITE_OK Then
    _SQLite_Shutdown ()
    Return SetError(3,0,1)
    EndIf
    For $i = 1 To UBound($aResult) -1
    For $j = 0 To UBound($ARRAY,2) -1
    $ARRAY[$i-1][$j] = $aResult[$i][$j]
    Next
    Next
    _SQLite_Exec ($hSQL, "DROP TABLE tblTEST;")
    _SQLite_Close ()
    _SQLite_Shutdown ()
    Return 0
    EndFunc ;==>_Array2DSortFree

    [/autoit]
  • Neueste Dokumente kopieren

    • BugFix
    • 11. Mai 2009 um 14:59

    Hi,
    ich hab dir mal 'ne Lösung erstellt (natürlich mit Arrays :D).

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>

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

    Global $path = @ScriptDir & '\test_x.txt'
    Global $aFile, $tmpSplit, $aSplit[_FileCountLines($path)][3], $aIndexDelete[1] = [-1]
    _FileReadToArray($path, $aFile) ; Textdatei in Array einlesen, jede Textzeile in einem Element
    If @error Then Exit MsgBox(0, 'Fehler', 'Datei konnte nicht eingelesen werden')

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

    ; gesamten Dateiinhalt in einem 2D-Array ($aSplit) darstellen
    For $i = 1 To UBound($aFile) -1
    $tmpSplit = StringSplit($aFile[$i], ',', 2)
    If @error Then ContinueLoop ; falls Leerzeile
    For $j = 0 To 2
    $aSplit[$i-1][$j] = $tmpSplit[$j]
    Next
    Next
    ;~ _ArrayDisplay($aSplit)

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

    ; sortieren nach Version
    _ArraySort($aSplit, 1, 0, 0, 1)
    ;~ _ArrayDisplay($aSplit, 'sortiert')

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

    ; bei mehrfacher Versionsnummer die älteren zum Löschen vormerken
    Local $new = -1
    For $i = 0 To UBound($aSplit) -1
    If $aSplit[$i][1] <> $new Then
    $new = $aSplit[$i][1]
    Else
    If $aIndexDelete[UBound($aIndexDelete)-1] <> -1 Then ReDim $aIndexDelete[UBound($aIndexDelete)+1]
    If $aSplit[$i][2] < $aSplit[$i-1][2] Then ; Datum kleiner als im vorigen Eintrag gleicher Version
    ; wenn noch nicht zum Löschen vermerkt ==> eintragen
    _ArraySearch($aIndexDelete, $i)
    If @error Then $aIndexDelete[UBound($aIndexDelete)-1] = $i
    Else
    _ArraySearch($aIndexDelete, $i-1)
    If @error Then $aIndexDelete[UBound($aIndexDelete)-1] = $i-1
    EndIf
    EndIf
    Next
    ;~ _ArrayDisplay($aIndexDelete)

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

    ; anhand der Lösch-Indexe die Einträge im Array löschen, ABER rückwärts, da sonst die Indexe nicht mehr stimmen!
    For $i = UBound($aIndexDelete) -1 To 0 Step -1
    _ArrayDelete($aSplit, $aIndexDelete[$i])
    Next
    ;~ _ArrayDisplay($aSplit, 'bereinigt')

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

    ; zurückschreiben in Datei
    Local $strWrite = ''
    For $i = 0 To UBound($aSplit) -1
    For $j = 0 To 2
    $strWrite &= $aSplit[$i][$j] & ','
    Next
    $strWrite = StringTrimRight($strWrite, 1) & @CRLF
    Next
    Local $fh = FileOpen($path, 2)
    FileWrite($fh, StringTrimRight($strWrite, 2))
    FileClose($fh)

    [/autoit]
  • Windows 7 Release Candidate

    • BugFix
    • 11. Mai 2009 um 10:47
    Zitat von AutoBert

    Mit meinem XP bin ich eigentlich ganz zufrieden

    :D Und was treibt dich dann, ein laufendes System zu ersetzen? ;)
    Du weißt doch: Never change a running system!

    Und nach den bisherigen Erfahrungen mit $MS ist auch dieses mal davon auszugehen, dass das System erst in 1-2 Jahren wirklich auf die User losgelassen werden kann. Da XP noch bis 2014 unterstützt wird, kannst du also in Ruhe schauen, welche Bugs dort so anfallen und wenn die ausgemerzt sind immer noch wechseln.
    Für mich steht außer Frage, dass XP das letzte Windows für mich ist. Parallel bin ich eh schon mit Linux 'befreundet' und wenn der Tag kommt, an dem keine Hardware mehr XP unterstützt, wird Windows endgültig zu Grabe getragen. ^^

  • pathbypid udf anhand der processlist pid?

    • BugFix
    • 10. Mai 2009 um 22:23
    Zitat von Sithlord95

    deine udf hat doch irgendwo drinne stehen wingetprocess


    Ja, für den Fall, dass keine PID übergeben wird, wird damit der Prozeß des aktiven Fensters verwendet (steht auch in der Funktionsbeschreibung erklärt):

    [autoit]

    If $PID = -1 Then $PID = WinGetProcess(WinGetTitle("[active]"))

    [/autoit]


    Es gibt nicht nur WinList sondern auch ProcessList und letzteres gibt dir die PID der Prozesse.

  • pathbypid udf anhand der processlist pid?

    • BugFix
    • 10. Mai 2009 um 20:13

    Welche Prozesse werden denn NICHT mit ProcessList() aufgelistet?

  • pathbypid udf anhand der processlist pid?

    • BugFix
    • 10. Mai 2009 um 20:07

    Gibt es: Anwendungspfad anhand der PID ermitteln

  • ArrayMore.au3

    • BugFix
    • 10. Mai 2009 um 13:17

    So, habe den Fehler entdeckt: _SQLite_Query() ist fehlerhaft. Habe nun mit _SQLite_GetTable2d ersetzt - tutti paletti.
    Nachteil: Nun ist es wieder etwas langsamer, denn Query ist die schnellste Funktion beim Auswerten.
    Korrigierte Version hier.

    Hat evtl. noch jemand die Prod 3.2.12.1 auf dem Rechner? Falls ja, könntet ihr mir bitte die SQLite.au3 dieser Version senden?
    Ich würde schon gern herausfinden, warum diese plötzlich verbugt ist.

  • autoit-quellcode mit spoiler und downloadicon

    • BugFix
    • 10. Mai 2009 um 11:23

    Sicher keine schlechte Idee. Da ich mir Skripte eigentlich fast nur online ansehe, ist die Möglichkeit, das Skript direkt mit SciTE zu öffnen für mich weniger interessant. Zumal ich SciTE eh offen habe und mir dann bei Bedarf ein Skriptsegment kopiere und in einem Testskript ausführe. Hier wäre also vllt. eine Ergänzung "Kopiere in Zwischenablage" ganz sinnvoll.

  • ArrayMore.au3

    • BugFix
    • 10. Mai 2009 um 00:12
    Zitat von Tweaky

    Vermute, dass es an AutoIt 3.3.0.0 liegt.


    Das scheint wohl der Fall zu sein :(

    Zitat von Changelog 3.2.12.1 ==&gt; 3.3.0.0

    Changed: _SQLite -> 3.6.7


    Wie es aussieht treten nun Fehler auf. Wenn ich alle SQL-Befehle, die innerhalb meiner Funktion generiert werden, in SQLite-Admin ausführe, funktioniert es tadellos. Jedoch innerhalb von AutoIt wird die Abfrage ( SELECT * FROM tblTEST ORDER BY ABS(field0) ASC,ABS(field3) DESC; ) mit einem SQL-Error abgebrochen.

    Unabhängig davon hattest du aber vergessen den Parameter $NUM zu übergeben, auch wenn das bei der vorliegenden Zahlenauswahl diesmal keinen Einfluß hätte.

    Naja, im Moment habe ich keine Idee, wie sich das lösen läßt. :S

  • Zensur?

    • BugFix
    • 7. Mai 2009 um 20:15
    Zitat von ctec

    Thread bitte closen!


    Dem Wunsch komm ich gerne nach, bevor das hier noch entartet.

  • Zensur?

    • BugFix
    • 6. Mai 2009 um 22:46

    Hi,
    unabhängig von den durch die Nutzungsbedingungen des Forums schon klar geregelten Vorgehensweisen des Betreibers (vorab bereits zitiert), schildere ich mal meine Sicht der Dinge und Vorgehesweise:
    Wenn mir in einem Post Sachverhalte auffallen, die im Widerspruch zu den Forenregeln oder auch zum Geist dieses Forums stehen, dann greife ich auch ein (editierend od. auch durch Schließen des Beitrags, wenn erforderlich auch mit Ver/Warnungen).
    Selbstverständlich ist das immer auch eine subjektive Sache - genauso wie Gesetze es sind. Möge niemand dem Wahn verfallen, dass eine gesetzliche Regelung etwas eineindeutiges ist. Ganz im Gegenteil: 5 Richter fällen garantiert zu 5 identischen Sachverhalten auch 5 verschiedene Urteile.
    Und Zensur ist ein Begiff der hier völlig fehl am Platz ist. Zensur ist, wenn eine freie Meinungsäußerung auf der Basis demokratischer Regeln unterbunden wird. Links zu illegalen Programmen sind nun nicht gerade als Bestandteil der Demokratie zu werten - oder?
    Es ist nicht gerade einfach, auf dem schmalen Grad zu wandeln zwischen: was ist gerade noch zulässig und was bereits ein Verstoß. Und ich bin der Meinung, dass wir hier bisher ein gutes Augenmaß dafür gefunden haben. Ich hab auch kein Problem damit zu sagen: He, das hatte ich fehlinterpretiert - sry. Also wenn sich mal jemand in dieser Richtung zu unrecht behandelt fühlt, bitte bei uns melden. Jedoch halte ich es für besser dieses direkt per PN/Mail abzuklären, als dazu eine große Diskussion breitzutreten.

    Und nun laßt uns wieder AutoIt'en. ;)

  • Dual Ethernet PCMCIA Card

    • BugFix
    • 5. Mai 2009 um 20:54
    Zitat von oliverh

    aber dann gehn mir 2 usb ports flöten


    Dann erweitere doch mit einem 4 PORT USB 2.0 PCMCIA-CARDBUS-ADAPTER
    [Blockierte Grafik: http://media.conrad.de/m/9000_9999/9700/9750/9758/975823_LB_02_FB.EPS.jpg]

  • GUIRebar

    • BugFix
    • 4. Mai 2009 um 20:22

    Sollte mit dem Style: $RBS_FIXEDORDER gehen.

  • µit Light Mai '09

    • BugFix
    • 3. Mai 2009 um 23:10

    Also, wenn ich noch mal einhaken darf: ;)
    Die Kürze (Anzahl Byte) halte ich für völlig irrrelevant. Schließlich geht es um ein Ein-Zeilen-Skript, also max. 4095 Zeichen. Und da sollte es das Ziel sein, diese eine Zeile so effektiv, wie möglich zu gestalten. Das macht ja den Reiz bei einem Ein-Zeilen-Skript aus.

  • µit Light Mai '09

    • BugFix
    • 3. Mai 2009 um 20:59

    Um euch schonmal in die richtige Richtung zu lenken:
    Wirklich viel bekommt ihr nur unter, wenn keinerlei Includes verwendet werden. Liegt in der Natur des Lösungsweges begründet. ;)

    Die Zeit zu bewerten halte ich nicht für sinnvoll. Wenn z.B. eine GUI dargestellt wird mit Controls (die auch benutzt werden können) liegt es ja am Anwender, wann er beendet.

  • Combo Box

    • BugFix
    • 3. Mai 2009 um 20:53
    Zitat von Jam00

    was ist ein "PseudoCode" ?


    z.B.
    - Datei einlesen in Array
    - in einer Schleife alle Arrayelemente (Zeilen) durchgehen
    - auf Übereinstimmung mit Vorgabe prüfen
    - bei Übereinstimmung Funktion _xyz aufrufen

  • Combo Box

    • BugFix
    • 3. Mai 2009 um 20:32

    Hi Alina,
    irgendwie gelingt es mir nicht, zu verstehen, was du möchtest.
    Erkläre mal am Besten mit PseudoCode.

  • _INET -Fragen

    • BugFix
    • 3. Mai 2009 um 20:18

    Schonmal geschaut, welchen Datentyp _StringBetween zurückgibt? ;)

  • Problem mit Vista oder mit ListView allgemein ?

    • BugFix
    • 3. Mai 2009 um 18:12

    Habe dazu folgendes gefunden:

    Zitat

    WS_EX_COMPOSITED wird zwar zum Teil zur
    Behebung des Child-Control Flackerns (in UserControls)
    benutzt, aber führt in einigen Fällen 100% CPU Last.


    Und dieses noch:

    Zitat

    Wo XP mit dem Style WS_EX_COMPOSITED automatisch double buffering fürs ganze Fenster macht, da hat Vista sowas wie eine eigebaute Automatik, die den Style überschreibt und fragmichnichtwas stattdessen verwendet
    Angeblich soll das ein Flackern verhindern, nur bei mir flackert es trotzdem heftig

  • File read im binär modus

    • BugFix
    • 3. Mai 2009 um 17:46

    :rolleyes: ...und was genau ist jetzt deine Frage?

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™