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

Beiträge von meistertogo

  • Array

    • meistertogo
    • 20. Januar 2014 um 18:52
    Zitat von Alina

    Fast schon ein
    "Array für Dummies". Aber nur fast, denn noch habe ich ja Fragen.


    Vielleicht hilft Dir ja zur besseren Veranschaulichung die Vorstellung eines (mehrdimensionalen) Arrays -- in Anlehnung an Deine momentane Wohnsituation -- als Daten-Hotel.

    • Erste Dimension: Eine Reihe (ein Flur) Zimmer auf einer Etage.
    • Zweite Dimension: Mehrere Reihen (Flure) auf einer Etage.
    • Dritte Dimension: Mehrere Etagen (übereinander).
    • Vierte Dimension: Verschiedene Zeitpunkte oder mehre Personen (bzw. Daten bzw. Array-Elemente) pro Zimmer.

    Danach wird es mit der anschaulichen Vorstellung schwierig.

  • Dezimalzahl in (gekürzten) Bruch umwandeln (UDF)

    • meistertogo
    • 20. Januar 2014 um 12:35

    UEZ:
    Anstatt Deiner eigenen ggT-Funktion könnte man auch den Euklidischen Algorithmus verwenden (den Du in Deiner Do-Until-Schleife praktisch verwendest):

    [autoit]

    Func _EuklidischerAlgorithmus_I ($a, $b);Berechnet den größten gemeinsamen Teiler der beiden Zahlen $a und $b [rekursive Version]
    If $b = 0 Then
    Return $a
    Else
    Return _EuklidischerAlgorithmus_I ($b, Mod($a, $b))
    EndIf
    EndFunc

    [/autoit][autoit]

    Func _EuklidischerAlgorithmus_II ($a, $b);s. o. [iterative Version]
    Local $h
    While $b <> 0
    $h = Mod($a, $b)
    $a = $b
    $b = $h
    WEnd
    Return $a
    EndFunc

    [/autoit]
  • Dezimalzahl in (gekürzten) Bruch umwandeln (UDF)

    • meistertogo
    • 19. Januar 2014 um 15:35

    Ich wollte möglichst viele Arrays verwenden, auch wenn man die eine oder andere Zeile ohne Arrays durchaus einsparen könnte.
    Eine gesonderte Funktion zum Kürzen war beabsichtigt, da -- je nach Anwendung -- ungekürzte Brüche gefragt sein könnten.

  • Dezimalzahl in (gekürzten) Bruch umwandeln (UDF)

    • meistertogo
    • 19. Januar 2014 um 15:03

    Hier meine beiden kleinen Funktionen:

    Dezimalzahl in Bruch umwandeln
    [autoit]

    #include-once
    #include <Array.au3>

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

    Func _DezimalzahlInBruch ($fDezimal, $bKuerzen = True)
    Local $aVorkomma[2], $aNachkomma[2], $aBruch[2]

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

    $aZahl = StringSplit($fDezimal, "", 2);StringLen($fDezimal) = UBound($aZahl)-1

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

    If StringInStr($fDezimal, ",") Then StringReplace($fDezimal, ",", ".", 1);optional: Ersetzung eines Dezimalkommas durch einen Dezimalpunkt
    $iPunkt = _ArraySearch($aZahl, ".")
    If $iPunkt < 0 Then SetError(1);Zahl ohne Dezimaltrennzeichen

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

    For $i = 0 To $iPunkt-1
    $aVorkomma[1] &= $aZahl[$i]
    Next
    $aVorkomma[0] = StringLen($aVorkomma[1])

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

    $aNachkomma[0] = StringLen($fDezimal)-($iPunkt+1);Länge der Nachkommazahl
    For $i = $iPunkt+1 To UBound($aZahl)-1
    $aNachkomma[1] &= $aZahl[$i];Nachkommazahl
    Next

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

    $aBruch[0] = $aNachkomma[1];Dividend
    $aBruch[1] = 10^$aNachkomma[0];= 10^StringLen($aNachkomma[1]);Divisor

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

    Select
    Case $aVorkomma[0] > 1 Or $aVorkomma[1] > 0
    $aBruch[0] += $aVorkomma[1] * $aBruch[1]
    If $bKuerzen = False Then
    Return $aBruch
    Else
    ContinueCase
    EndIf
    Case Else
    Return _BruchKuerzen ($aBruch[0], $aBruch[1])
    EndSelect
    EndFunc

    [/autoit]
    Bruch kürzen
    [autoit]

    Func _BruchKuerzen ($iDividend, $iDivisor)
    Local $aBruch[2] = [$iDividend, $iDivisor], $aTeiler[2] = [2, 5]
    Do
    For $i = 0 To 1
    If Not Mod($aBruch[0], $aTeiler[$i]) And Not Mod($aBruch[1], $aTeiler[$i]) Then
    For $n = 0 To 1
    $aBruch[$n] = $aBruch[$n] / $aTeiler[$i]
    Next
    EndIf
    Next
    Until (Mod($aBruch[0], $aTeiler[0]) Or Mod($aBruch[1], $aTeiler[0])) And (Mod($aBruch[0], $aTeiler[1]) Or Mod($aBruch[1], $aTeiler[1]))
    Return $aBruch
    EndFunc

    [/autoit]
    Beispielskript
    [autoit]

    Global $aErgebnis[2], $fDezimal = 18.8

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

    $aErgebnis = _DezimalzahlInBruch ($fDezimal, False)
    ConsoleWrite($fDezimal & " = " & $aErgebnis[0] & " / " & $aErgebnis[1] & @CRLF)
    $aErgebnis = _DezimalzahlInBruch ($fDezimal, True)
    ConsoleWrite($fDezimal & " = " & $aErgebnis[0] & " / " & $aErgebnis[1] & @CRLF)
    Exit

    [/autoit]
  • Flascher Link bei _GUICtrlListView_SimpleSort

    • meistertogo
    • 19. Januar 2014 um 14:53

    Kleine (aber eigentlich belanglose) Anmerkung: Im Titel dieses Themas meintest Du sicher "Falscher Link bei _GUICtrlView_SimpleSort".

  • ListView Absatz zwischen Einträgen verändern

    • meistertogo
    • 14. Januar 2014 um 14:06

    Du könntest (z. B. alle x Einträge) einen leeren Eintrag (" ") oder einen Platzhalter ("...") einfügen.

  • Kettenbruchentwicklung

    • meistertogo
    • 13. Januar 2014 um 17:24

    Hier meine kleinen UDFs zur Kettenbruchentwicklung:

    Zahl in Kettenbruch umwandeln bzw. umrechnen
    [autoit]

    #include-once
    #include <Array.au3>
    Func _ZahlInKettenbruch ($iDivident, $iDivisor);Rechnet eine Zahl bzw. einen Bruch (z. B. 17/10) in einen Kettenbruch der Form (1; 1, 2, 3) um.
    _EuklidischerAlgorithmus_I ($iDivident, $iDivisor)
    _ArrayDelete($aKettenbruch, UBound($aKettenbruch)-1)
    For $i = 0 To UBound($aKettenbruch)-(1+2)
    $aKettenbruch[$i] = ($aKettenbruch[$i]-$aKettenbruch[$i+2])/$aKettenbruch[$i+1]
    Next
    _ArrayDelete($aKettenbruch, UBound($aKettenbruch)-1)
    ConsoleWrite($iDivident & " / " & $iDivisor & " = " & "(" & StringReplace(_ArrayToString($aKettenbruch, ", "), ",", ";", 1) & ")" & @CRLF)
    EndFunc

    [/autoit]
    Kettenbruch in Zahl umwandeln bzw. umrechnen
    [autoit]

    #include-once
    #include <Array.au3>
    Func _KettenbruchInZahl ($aKettenbruch);Rechnet einen Kettenbruch der Form (0; 1, 2, 3, 4, 5, 6, 7, 8, 9) (in einem Array, d. h. ohne Semikolon) in eine Zahl bzw. einen Bruch um.
    Local $aZahl[2] = [0, 1], $z = 1
    For $i = UBound($aKettenbruch)-1 To 0 Step -1
    _ArrayAdd($aZahl, "")
    $z += 1
    $aZahl[$z] = $aKettenbruch[$i] * $aZahl[$z-1] + $aZahl[$z-2]
    Next
    ConsoleWrite("(" & StringReplace(_ArrayToString($aKettenbruch, ", "), ",", ";", 1) & ") = " & $aZahl[UBound($aZahl)-1] & " / " & $aZahl[UBound($aZahl)-2] & @CRLF)
    EndFunc

    [/autoit]

    Hier noch der benötigte Euklidische Algorithmus in zwei Versionen:

    Euklidischer Algorithmus -- Version I
    [autoit]

    Func _EuklidischerAlgorithmus_I ($a, $b);Berechnet den größten gemeinsamen Teiler der beiden Zahlen $a und $b [rekursive Version]
    _ArrayAdd($aKettenbruch, "")
    $n += 1
    If $b = 0 Then
    $aKettenbruch[$n] = $a
    Return $a
    Else
    $aKettenbruch[$n] = $a
    Return _EuklidischerAlgorithmus_I ($b, Mod($a, $b))
    EndIf
    EndFunc

    [/autoit]
    Euklidischer Algorithmus -- Version II
    [autoit]

    Func _EuklidischerAlgorithmus_II ($a, $b);s. o. [iterative Version]
    Local $h
    While $b <> 0
    $h = Mod($a, $b)
    $a = $b
    $b = $h
    WEnd
    Return $a
    EndFunc

    [/autoit]

    Als globale Variablen werden

    [autoit]

    Global $aKettenbruch[1]

    [/autoit]

    und

    [autoit]

    Global $n = -1

    [/autoit]

    benötigt.

  • Verzeichnis in Variable

    • meistertogo
    • 13. Januar 2014 um 17:05

    Ein Moderator (oder Poweruser (?)) könnte dieses Thema vielleicht nach "Hilfe & Unterstützung" verschieben.

  • Response Header bearbeiten

    • meistertogo
    • 13. Januar 2014 um 14:23

    Unabhängig von Deiner inhaltlichen Frage wäre es schön, wenn Du für das Darstellen von AutoIt-Quellcode in Beiträgen die AutoIt-Quellcode-Tags (weiter rechts neben dem Quellcode-Tag) verwenden würdest.

  • Schleife mit Variabler

    • meistertogo
    • 11. Januar 2014 um 10:37

    Verwende für das Darstellen von Quellcode in Beiträgen bitte die AutoIt-Quellcode-Tags.

    Außerdem ist es insbesondere als Anfänger sehr hilfreich, Tutorials zu lesen (d. h. nachzuvollziehen usw.) und die Hilfe(-dateien) zu den AutoIt-Funktionen zu benutzen.
    Programmieren erfordert eigenständiges Lernen und Arbeiten.

    Hilfe


    Hier ein Ansatz:

    [autoit]

    $iAnzahl = InputBox("Beispiel", "Anzahl der Schleifendurchläufe")
    If IsInt($iAnzahl) And $iAnzahl > 1 Then
    For $i = 1 To $iAnzahl
    ;hier steht, der $iAnzahl-mal auszuführende Code
    Next
    EndIf
    Exit

    [/autoit]


    Hier die Alternative mit Eingabebeschränkung:

    [autoit]

    #include-once
    #include <EditConstants.au3>
    #include <GUIConstants.au3>

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

    Global $aGUI[3]
    $aGUI[0] = GUICreate("Test", 500, 500)
    $aGUI[1] = GUICtrlCreateInput("", 5, 5, 75, 25, $ES_NUMBER)
    $aGUI[2] = GUICtrlCreateButton("Absenden", 85, 35, 75, 25)
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()

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

    Switch $msg
    Case $GUI_ON_EVENT_CLOSE
    Exit
    Case $aGUI[2]
    If GUICtrlRead($aGUI[2]) > 1 Then
    For $i = 1 To GUICtrlRead($aGUI[2])
    ;hier steht der auszuführende Code
    Next
    EndIf
    EndSwitch
    WEnd

    [/autoit]


    PS: Vermutlich hast Du das Handle bzw. die ID des Input-Controls abgefragt und nicht

    [autoit]

    GUICtrlRead()

    [/autoit]

    verwendet.
    PPS: Man könnte das Input-Control auch mithilfe regulärer Ausdrücke (und einer UDF von peethebee) beschränken.

  • Autoit Programm dauert lange bis es offen ist; Vorschläge für vereinfachung benötigt!

    • meistertogo
    • 10. Januar 2014 um 15:43

    Du könntest u. U. Arrays benutzen (zumindest um die Anzahl der verschiedenen Variablennamen zu reduzieren). Siehe dazu das Array-Tutorial von BugFix.

  • If Abfrage

    • meistertogo
    • 8. Januar 2014 um 15:47

    Ebenso funktionieren müsste:

    [autoit]

    $iCompany = 2230

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

    Switch $iCompany
    Case 2221 To 2225
    MsgBox(64, "Empfänger", "A")
    Case 2226 To 2229
    MsgBox(64, "Empfänger", "B")
    Case 2230
    MsgBox(64, "Empfänger", "C")
    EndSwitch

    [/autoit]


    Außerdem könnte man "A", "B" und "C" auch durch eine Variable ersetzen, sodass nur ein allgemeiner(er) Aufruf der MsgBox-Funktion nötig wäre.
    Ist aber vermutlich alles Geschmackssache.

  • Combobox Werte begrenzen

    • meistertogo
    • 6. Januar 2014 um 13:22
    [autoit]

    #include-once
    #include <ComboConstants.au3>
    GUICtrlCreateCombo("Test", 5, 5, Default, Default, $CBS_NOINTEGRALHEIGHT)

    [/autoit]
  • Login Script (Mehre User)

    • meistertogo
    • 4. Januar 2014 um 11:48

    Unabhängig von Deinem inhaltlichen Problem: Verwende anstatt der PHP-Quelltext-Tags für AutoIt-Quelltext die AutoIt-Quelltext-Tags.

  • Selektieren nach Button!

    • meistertogo
    • 31. Dezember 2013 um 12:02

    Unabhängig der o. g. Antworten, würde ich Dir eine Veränderung Deiner "Zufalls-"Funktion empfehlen:
    Verwende ein Array:

    [autoit]

    Global $aWort[44] = ["ausgezeichnet", "Autofahrer", "Elektrizität", ...]
    $iZufall = Random(0, 43, 1)
    $sWort = $aWort[$iZufall]

    [/autoit]
  • ComboBox Startwert löschen

    • meistertogo
    • 29. Dezember 2013 um 10:31
    [autoit]

    GUICtrlSetData()

    [/autoit]
  • Frage zu _FFCmd_Err

    • meistertogo
    • 26. Dezember 2013 um 13:12

    Unabhängig von Deiner Frage, kann ich Dir einen Tipp zum Verfassen von Beiträgen im Forum geben: Verwende die Autoit- bzw. Quellcode-Tags, um Dir aufwendige Formatierungsarbeiten zu ersparen.
    Die entsprechenden Schaltflächen finden sich (beim Verfassen eines neuen Beitrages) in der Quellcode-Ansicht unterhalb der "Schriftgröße"-Option horizontal aufgelistet.

  • List View bestimmten Eintrag ausblenden

    • meistertogo
    • 24. Dezember 2013 um 13:14

    Auf diese Art und Weise (Ignorieren sämtlicher Ratschläge und Hinweise zur Selbsthilfe, Verfassen von Beiträgen ohne Themenbezug etc.) wird man Dir im Forum vermutlich nicht weiterhelfen (können).

    Du könntest einen vollständigen Programmwunsch allerdings im entsprechenden Unterforum kundtun.

  • List View bestimmten Eintrag ausblenden

    • meistertogo
    • 23. Dezember 2013 um 19:44

    Scheinbar kennst Du die Funktion nicht, da Dir ansonsten klar sein müsste, dass

    [autoit]

    GUICtrlRead()

    [/autoit]

    nur zwei Parameter akzeptiert und daher nicht auf diese Art und Weise verwendet werden kann.

    Außerdem trägst Du (bzw. Dein Programm) die Daten doch selbst in die ListView-Tabelle ein. Wieso musst Du sie dann erneut auslesen?

    Durch einfache Suche in der Hilfe oder im Internet würdest Du auf folgende Funktionen stoßen:

    [autoit]

    _GUICtrlListView_GetItemTextArray()
    _GUICtrlListView_GetItemText()
    _GUICtrlListView_GetItemTextString()

    [/autoit]

    PS: Wenn man die Hilfe der Funktion

    [autoit]

    GUICtrlRead()

    [/autoit]

    liest, stellt man fest, dass dort auch Informationen zu ListView-Controls zu finden sind, die Dir weiterhelfen würden.

  • List View bestimmten Eintrag ausblenden

    • meistertogo
    • 23. Dezember 2013 um 19:16
    [autoit]

    GUICtrlRead()

    [/autoit]


    PS: Es wäre schön, wenn Du für neue Fragen (d. h. Probleme, die nach Konsultieren der Hilfe-Dateien, bekannter Suchmaschinen und der Foren-Suche unlösbar erscheinen) ein eigenes Thema erstellen würdest.

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™