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

  • Aufgabe mit AutoIt lösbar?

    • BugFix
    • 17. März 2014 um 20:35

    Sag bitte nochmal genau anhand dieses Bsp.-Textes
    "Blabla blub [C2] [A4] [G1] blabla bla"
    wie du mit den Werten aus den eckigen Klammern weiter verfahren möchtest. Den Zusammenhang mit der Ini habe ich nicht so richtig gerafft.

  • RegExp: String ausschließen

    • BugFix
    • 17. März 2014 um 10:35

    Ich interpretiere die Punkte in deinem Bsp. als beliebig viele Inner-Tags, die ebenfalls selektiert werden sollen.

    Das kannst du dann so auslesen:

    [autoit]

    $sSearch = "test2"
    $sPattern = "(<item>\s*(?:<[^>]+>(?:[^<]+)</[^<]+>\s*)*<main>" & $sSearch & "</main>\s*(?:<[^>]+>(?:[^<]+)</[^<]+>\s*)*</item>)"
    $sString = _
    '<item>' & @CRLF & _
    ' <tagA>111111</tagA>' & @CRLF & _
    ' <tagB>222222</tagB>' & @CRLF & _
    ' <main>test1</main>' & @CRLF & _
    ' <tagC>333333</tagC>' & @CRLF & _
    ' <tagD>444444</tagD>' & @CRLF & _
    '</item>' & @CRLF & _
    '<item>' & @CRLF & _
    ' <tagA>111111</tagA>' & @CRLF & _
    ' <tagB>222222</tagB>' & @CRLF & _
    ' <main>test2</main>' & @CRLF & _
    ' <tagC>333333</tagC>' & @CRLF & _
    ' <tagD>444444</tagD>' & @CRLF & _
    '</item>' & @CRLF & _
    '<item>' & @CRLF & _
    ' <tagA>111111</tagA>' & @CRLF & _
    ' <tagB>222222</tagB>' & @CRLF & _
    ' <main>test3</main>' & @CRLF & _
    ' <tagC>333333</tagC>' & @CRLF & _
    ' <tagD>444444</tagD>' & @CRLF & _
    ' <tagE>555555</tagE>' & @CRLF & _
    '</item>' & @CRLF

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

    $aMatch = StringRegExp($sString, $sPattern, 3)
    If IsArray($aMatch) Then
    For $i = 0 To UBound($aMatch) -1
    ConsoleWrite($aMatch[$i] & @LF)
    Next
    EndIf

    [/autoit]

    Gefunden wird:

    Code
    <item>
    	<tagA>111111</tagA>
    	<tagB>222222</tagB>
    	<main>test2</main>
    	<tagC>333333</tagC>
    	<tagD>444444</tagD>
    </item>

    Wenn du Hilfe bei einem Pattern benötigst, ist es unerlässlich die Rahmenbedingungen 100% exakt anzugeben. Damit das Pattern greift müssen alle Textvarianten bei der Erstellung bekannt sein.
    Hättest du von Anbeginn gesagt, dass du anhand eines bekannten Wertes in dem main-Tag allen Inhalt im umfassenden item-Tag auslesen möchtest, wäre die Kuh sofort vom Eis gewesen.
    Dadurch, dass du aber ständig darauf beharrt hast einen Lösungsansatz mit Ausschluss zu verfolgen, hast du nur Verwirrung gestiftet. :rolleyes:
    Mach dir aber nichts draus, den Punkt haben wir alle schon erlebt. ;) Da rennt man wie vernarrt einem Lösungsweg hinterher und sieht nichts links und rechts. Darum ist es immer von Vorteil, so viel wie möglich vom Problem zu schildern. Dann kann hier oft ein effektiverer Weg vorgeschlagen werden. :thumbup:

  • Aufgabe mit AutoIt lösbar?

    • BugFix
    • 16. März 2014 um 22:48

    Also wenn du den Text nur auf diese Art lesen kannst, lässt sich z.B. so der Inhalt der eckigen Klammern selektieren:

    [autoit]


    $sText = "Blabla blub [C2] [A4] [G1] blabla bla"
    $aMatch = StringRegExp($sText, "\[([^\]]+)", 3)
    For $i = 0 To UBound($aMatch) -1
    ConsoleWrite('Match Nr. ' & $i+1 & ': ' & $aMatch[$i] & @LF)
    Next

    [/autoit]
  • RegExp: String ausschließen

    • BugFix
    • 16. März 2014 um 22:35
    Zitat von powerbass4

    Erstmal Danke.....aber da gibt es ein Problem; die einzigen Konstanten sind die <item> und <main> tags ! (alles was noch im <item> tag steht ist unbekannt)


    Ich verstehe nicht, was du willst.
    Du hast uns ein Muster erstellt, anhand dieses Musters wurde das Pattern erstellt - und das passt auch korrekt. Du legst nur den Inhalt von "main" als Suchbegriff fest, alles andere ist völlig egal, was in den Tags steht.
    Wenn du meinst das funktioniert nicht mit deiner Vorlage, dann zeig doch bitte eine korrekte Vorlage.

    Und deine Fragestellung ist immer wieder falsch. Classes gibt es nicht für Wörter, wäre ja auch widersinnig, da das dann mit RegEx nichts mehr zu tun hat.

    Zitat

    Die einfachste Lösung wäre einen <item> tag zwischen dem öffnendem <item> und den (beiden) <main> tags auszuschließen.

    Ganz und gar nicht, das wäre die komplizierteste aller Varianten.
    Ein Pattern sollte so erstellt werden, dass es effektiv und allgemeingültig ist. Je spezieller, desto komplizierter. ;)

  • RegExp: String ausschließen

    • BugFix
    • 16. März 2014 um 09:52

    Ich denke mal, du hast folgendes vor:
    1. du hast einen beliebigen Suchbegriff (kommt in einem main-Tag vor)
    2. nun willst du die zugehörigen item-Tags dafür auslesen (title, text)
    3. alle anderen item bleiben unberücksichtigt

    Ist das korrekt?
    Dein Pattern müsste dann nichts ausschliessen, sondern NUR den item-/item Bereich mit deinem Suchbegriff einschliessen. So wird ein Schuh draus.

    Edit:
    Hier mal ein Pattern, das dieses Ergebnis bringt:
    \<item\>\s*\<title>([^<]+)\</title\>\s*\<main\>(test2)\</main>\s*\<text\>([^<]+)\</text\>\s*\</item\>

    Ergebnis:
    $a[0] = title
    $a[1] = main = Suchbegriff (blau im Pattern)
    $a[0] = text

  • SQLite -- autoincrement key mit Startwert erstellen

    • BugFix
    • 13. März 2014 um 17:59

    Hi,

    ich erstelle in SQLite eine Tabelle wie folgt:

    SQL
    CREATE TABLE IF NOT EXISTS [kunden] ([kdnr] INTEGER PRIMARY KEY AUTOINCREMENT, ...)


    Nun würde ich gerne beim Erstellen den Startwert für "kdnr" festlegen, z.B. '10000'.
    In der SQLite-Syntax habe ich keine Möglichkeit gefunden, einen Standardwert mit autoincrement zu kombinieren. Ein Umweg wäre nun, nach dem Erstellen der Tabelle einen ersten Datensatz hinzuzufügen mit kdnr=9999. Anschließend diesen DS wieder löschen. In den Metatables bleibt der grösste Index gespeichert und beim Einfügen des dann wirklich ersten DS wird automatisch kdnr=9999+1 verwendet.
    Diese Variante gefällt mir aber nicht sonderlich. Hat evtl. schon mal jemand dieses Problem eleganter lösen können?

  • Edit Control langsam zu langsam, alternative?

    • BugFix
    • 10. März 2014 um 15:31

    Ich würde:
    - die Daten auf einen Stack schieben
    - mit einem anderen Prozeß vom Stack kontinuierlich neue Daten abholen und im Edit anhängen

  • Zahl (Int, Float) in Tausendergruppierung ausgeben, Währungsformatierung

    • BugFix
    • 10. März 2014 um 15:24
    Zitat von WhiteF

    kannst du die funktion um ein parameter erweitern, sodass auch bei ergebnissen mit keiner nachkommastelle, dennoch 2 nachkommazahlen mitausgegeben werden?


    Hiermit getan. Mit "-1" (Voreinstellung) für $iDecPlaces wird die tatsächliche Anzahl an Dezimalstellen verwendet. Jede andere Angabe (0, 1, 2, ...) erzwingt diese Anzahl an Nachkommastellen. Wird dabei die Ausgabe gekürzt, wird die letzte Stelle gerundet.

    _NumberFormatThousand
    [autoit]


    Func _NumberFormatThousand($vNumber, $iDecPlaces=-1, $sLang='DE') ; bis 18 Vorkommastellen
    If $iDecPlaces > -1 Then $vNumber = StringFormat('%.' & $iDecPlaces & 'f', StringReplace($vNumber, ',', '.'))
    Local $sOut = '', $a = StringRegExp(StringReplace($vNumber, '.', ','), "(-?\d{1,3})(\d{3})?(\d{3})?(\d{3})?(\d{3})?(\d{3})?(?:\Z|(,\d+))", 3)
    For $i = 0 To UBound($a) -1
    If $a[$i] <> '' Then $sOut &= '.' & $a[$i]
    Next
    If $sLang <> 'DE' Then Return StringTrimLeft(StringReplace(StringReplace($sOut, '.', ','), ',,', '.'), 1)
    Return StringTrimLeft(StringReplace($sOut, '.,', ','), 1)
    EndFunc

    [/autoit]
  • Spritz, Spreeder und Co - extrem schnell lesen

    • BugFix
    • 2. März 2014 um 10:45

    :D
    Also mein Beitrag war eher ironisch gemeint, weil ich hinter dieser Spreed/Spritz Geschichte keinen erkennbare Nutzen sehe.
    Lesen ist sehr individuell. Ich weiss nicht wie ihr lest, aber ich lese nicht, indem ich Buchstaben entziffere und aneinanderreihe. Ich lese über den Bildeindruck eines Wortes. Und die angegebene "Steigerung" ist bei mir Grundlesegeschwindigkeit.
    Als ich noch tagtäglich mit der Bahn zur Arbeit fuhr saß mir im Abteil immer ein Zeitungsleser gegenüber. Ich habe auf Kopf die Zeitung immer schneller gelesen als er. ;)

    Lesen ist in erster Linie eine Übungssache. Wenn man viel liest (gelesen hat), erfasst man viele Wörter aus dem Kontext und kann so fast eine Zeile in einem Blick aufnehmen.
    Also ist Übung der beste Lehrmeister und nicht diese seltsamen Wortzerstückelungen.

  • Spritz, Spreeder und Co - extrem schnell lesen

    • BugFix
    • 1. März 2014 um 20:26

    Einfachste Implementation: Alle Vokale entfernen. Gravierende Erhöhung der Lesegeschwindigkeit ohne Verlust des Inhalts. Nur in ganz wenigen Fällen ist im Kontext unklar, welche Vokale wir uns denken müssen. ;)

  • Problem mit erstellen von Shellexecute Variablen

    • BugFix
    • 28. Februar 2014 um 17:19
    [autoit]

    Global $shellcommand = 'C:\Temp\extractMHT.exe "C:\Temp\RFA\RFA"' & $line & Chr(32) & '"C:\Temp\unzip"'

    [/autoit]

    Die Richtigkeit des Befehls habe ich aber nicht kontrolliert.

  • programm beenden

    • BugFix
    • 27. Februar 2014 um 19:28

    Hab das hier leider nicht eher gesehen.

    Das, was du hier abziehst ist eine Beleidigung aller Forenmitglieder.
    Unfähig die deutsche Sprache in halbwegs verständlicher Schriftform darzubieten! Du mußt keine Superleuchte in Rechtschreibung und Grammatik sein - verlangt keiner.
    Aber wir erwarten - Nein, wir verlangen von dir, dass du gefälligst bei Defiziten in dieser Richtung ein Hilfsprogramm zu Rate ziehst, derer es ausreichend gibt. Einfach Grammatik- und Rechtschreibprüfung über dein Geschreibsel laufen lassen und alle sind glücklich.

    Das hier müssen wir uns nicht weiter antun, zumal Einsicht deinerseits nicht ersichtlich ist.
    Deshalb:

    [CLOSED]

  • Aufgabe mit AutoIt lösbar?

    • BugFix
    • 27. Februar 2014 um 11:49

    Bevor du Send() verwendest, solltest du erst mal mit AutoItWindow-Info überprüfen, ob die Control des Programms evtl. auch Windows-tauglich sind und direkt angesprochen werden können. Schau dir dazu die Control..-Befehle an

    [autoit]

    ControlCommand
    ControlClick
    ; usw.

    [/autoit]
  • Mausrad

    • BugFix
    • 26. Februar 2014 um 13:43
    Zitat von Ilse

    Fehlt da noch was?


    Ja, die Hauptschleife - und das Aufheben der Eventzuordnung sollte am Programmende erfolgen ;)

    [autoit]

    #include "MouseOnEvent.au3"; ist im Scriptdirverzeichnis drin!
    ; setze hier noch einen Hotkey um das Skript beenden zu können, sonst bleibst du ewig in der Hauptschleife ;)
    $iPaused = False
    _MouseSetOnEvent($MOUSE_WHEELDOWN_EVENT, "_PausePlay", 0, 1)

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

    While True
    Sleep(50)
    WEnd
    _MouseSetOnEvent($MOUSE_WHEELDOWN_EVENT) ; kannst du dir auch schenken, Programm ist dann eh beendet

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

    Func _PausePlay()
    MsgBox(4096,"","")
    $iPaused = Not $iPaused
    ConsoleWrite("Paused: " & $iPaused & @CRLF)
    EndFunc

    [/autoit]
  • DriveMapAdd() API Error @extended 52

    • BugFix
    • 26. Februar 2014 um 12:46
    Zitat von ReneW

    wobei mich der Hinweis "ERROR_DUP_NAME" im msdn nicht wirklich weiter bringt.


    Dem Manne kann geholfen werden (kpl. Übersicht: hier:

    Zitat von MS_SystemErrorCodes


    ERROR_DUP_NAME
    You were not connected because a duplicate name exists on the network. If joining a domain, go to System in Control Panel to change the computer name and try again. If joining a workgroup, choose another workgroup name.

  • Concatenates Operator und Anderes

    • BugFix
    • 25. Februar 2014 um 15:10

    Ich seh keinen Unterschied zwischen "9 Variablen" und "9 verschiedene, fortlaufende Variablen".
    Also Array oder Dictionary-Objekt

    Spoiler anzeigen
    [autoit]

    ;Read PLZ into Array
    $oBody = ObjCreate('Scripting.Dictionary')
    For $i = 0 To 9
    _IENavigate($oIE, "http://www.beispiel-webseite.de/thumbs.php?postleitzahl="&$i)
    $sHtml = _IEBodyReadHTML($oIE)
    $sHtml = StringTrimLeft($sHtml, StringInStr($sHtml, "Benutzer") )
    $sHtml = StringTrimRight($sHtml, 851)
    Sleep(500)
    ;Zusammenfugen
    $oBody.Add($i, $sHtml)
    Next

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

    For $i = 0 To 9
    ConsoleWrite($i & ': ' & $oBody.Item($i) & @LF)
    Next

    [/autoit]


    Wobei ich AJ zustimme - 851 Zeichen trimmen sieht sehr Fehleranfällig aus.

  • Tetris

    • BugFix
    • 25. Februar 2014 um 11:56
    Zitat von Make-Grafik

    und verschiebst [1] nach [0] und [2] nach [1]. In [2] kannst du einen neuen Stein generieren.


    Und das händische Verschieben kannst du dir ersparen, wenn du dafür

    [autoit]

    _ArrayPush

    [/autoit]

    verwendest. ;)

  • Concatenates Operator und Anderes

    • BugFix
    • 25. Februar 2014 um 09:08

    zu a)
    Das ist in AutoIt in der Form nicht möglich.
    Du könntest alternativ Folgendes anwenden:

    [autoit]

    For $i = 1 To 10
    Assign('Var_' & $i, $i)
    Next
    ConsoleWrite(Eval('Var_5') & @LF)

    [/autoit]

    Aber zum Einen ist Assign/Eval als schlechter Stil verpönt und zum Anderen generieren derartig erstellte Variablen einen Error bei der Syntaxprüfung, da sie erst zur Laufzeit existieren. Du könntest sie also nur mit Eval ansprechen.
    Und warum willst du Arrays vermeiden? Berührungsängste? Das legt sich spätestens dann, wenn du merkst, wie sehr du dir die Arbeit im Skript damit vereinfachen kannst.

    zu b)
    AutoIt kann mit einigen Objekten umgehen. Dazu gehört auch dein Bsp. Internet Explorer.
    Und somit ist der Punkt das übliche Trennsymbol zu den Methoden und Eigenschaften dieses Objektes. Eine Übersicht darüber kannst du dir bei MSDN suchen.

  • FireBird.au3 mit FDB Datenbank - ExecuteSelect Rückgabewert

    • BugFix
    • 21. Februar 2014 um 15:55

    Meine Lösung basiert auf der Verwendung von ODBC-Treibern (steht so auch im Funktionskopf ;))
    Hast du evtl. keine ODBC-Treiber installiert (standardmäßig nicht der Fall)? Hier findest du eine Auswahl.

  • Bei zweitem Fenster funktioniert "GUISetOnEvent($GUI_EVENT_PRIMARYDOWN,..." nicht

    • BugFix
    • 21. Februar 2014 um 11:56
    Zitat von DOheim

    ($bState) ? (GUISetState(@SW_SHOW, $hChild)) : (GUISetState(@SW_HIDE, $hChild))


    Das ist ein ternärer Operator und seit der 3.3.10.. in der Stable. Ich vermute mal, du hast eine ältere Version. Kannst du auch als ganz normales If-Then-Else schreiben. Ternäre Operatoren sind ausschließlich "Syntactic Sugar". Wer es also süß mag... ;)

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™