Hi Moombas ,
Danke auch dir fürs Mitmachen und Danke für den Gruß am Ende 🎄 .
Auch deine Lösung passt 👍 .
Das du Punkte statt Leerzeichen genutzt hast ist offensichtlich Absicht gewesen, daher: all good.
Eine angenehme Weihnachtszeit dir.
Viele Grüße
Sven
Beiträge von SOLVE-SMART
-
-
Das + ist ein Kopierschutz. Man kann damit eindeutig erkennen, ob jemand abgeschrieben hat.

Sehr kreativ, bekommst extra Punkte 🤣 .
[...] Tannenbaum habe ich seit die kleine Verstorben ist nicht mehr. Ich habe keinen Grund dazu. [...]
Geht mich nichts an, aber mein aufrichtiges Beleid 😔 . Bleib stark. Eine angenehme Urlaubszeit dann für dich.
-
Hier übrigens auch mal mein Lösungsansatz. Nicht erschrecken, ist ziemlich ausführlich (mit Absicht) 😇 .
Spoiler anzeigen
AutoIt
Alles anzeigen_DrawTree(15) Func _DrawTree($iRows) Local $iCountOfSpaces = $iRows - 1 Local Const $sMaxPadding = _CharacterRepeat(' ', $iCountOfSpaces) Local Const $sPeakCharacter = '*' Local Const $sTreeCharacter = 'X' Local Const $sTribeCharacter = '| |' Local $iCountOfTreeCharacters = 1 _Print() ; only for design purposes For $i = 1 To $iRows Step 1 Switch $i Case 1 _Print($sMaxPadding & $sPeakCharacter & $sMaxPadding) Case 2 _Print($sMaxPadding & $sTreeCharacter & $sMaxPadding) Case $iRows Local $sPadding = StringTrimRight($sMaxPadding, 1) _Print($sPadding & $sTribeCharacter & $sPadding) Case Else $iCountOfSpaces -= 1 $iCountOfTreeCharacters += 2 Local $sPadding = _CharacterRepeat(' ', $iCountOfSpaces) Local $sTreeCharacters = _CharacterRepeat($sTreeCharacter, $iCountOfTreeCharacters) _Print($sPadding & $sTreeCharacters & $sPadding) EndSwitch Next _Print() ; only for design purposes EndFunc Func _CharacterRepeat($sCharacter, $iOccurrence = 1) ; I know about _StringRepeat(), but I don't ; want to include a UDF only for one function of it Local $sCharacters = Null For $i = 1 To $iOccurrence Step 1 $sCharacters &= $sCharacter Next Return $sCharacters EndFunc Func _Print($sText = '') ConsoleWrite($sText & @CRLF) EndFunc
Viele Grüße
Sven -
Hi zusammen,
es freut mich das bereits ein paar von euch teilgenommen haben 😀 .
Hier mein Feedback zu euren Beiträgen.
Velted:
Abgesehen davon das in der Aufgabenstellung keine Rede von einem Minimum oder Maximum war (und ich gebe BugFix Recht, min. würde drei sein), ist dein Lösungsansatz natürlich richtig 👍 .
Bei solchen Code Katas ist es i.d.R. wichtig, dass die Aufgabenstellung genau genommen wird, da meistens in einer zweiten Iteration die Aufgabe noch erweitert wird.
Bspw. + statt X zu verwenden geht nicht - bei uns hier schon 😅 .
Danke fürs Mitmachen.
BugFix :
Da gibt es nicht viel zu sagen, passt genau wie es ist. Danke auch dir fürs Mitmachen 👍 .
Alina:
Danke für den witzigen Ansatz 😅 . Dein Beitrag fällt aus der Wertung raus, da es nicht die Aufgabenstellung erfüllt. Aber an sich eine schöne Idee mit den Kerzen zusätzlich 😊 .
Dies wäre eine tolle Ergänzung für eine zweite Iteration. Ein Hinweis noch: In deinem Code-Snippet fehlt das EndFunc noch.
Danke fürs Mitmachen.
Viele Grüße
Sven -
Hi Leute,
hier mal wieder, zum Jahresausklang, etwas für zwischendurch: Die "Christmas Tree" Code Kata.
💡 Ziel: Ist es einen Algorithmus bestehend aus einer oder mehreren Funktionen zu schreiben, der dir einen Weihnachtsbaum auf der Konsole ausgeben lässt.- Es dürfen nur diese drei Zeichen verwendet werden: * für die Spitze, X als Tannennadeln und | als Baumstamm-Symbol.
- Das Baumstamm-Symbol (die Pipe) soll doppelt und trotzdem mittig dargestellt werden | |.
🥈 Teil 1: Entwickle die Funktion(en) um den Weihnachtsbaum auf acht Zeilen in der Konsole darzustellen.
🥇 Teil 2: Erweitere den Ansatz um flexibel einen Weihnachtsbaum mit bspw. 15 Zeilen in der Konsole darzustellen (oder 12 Zeilen oder 20 Zeilen [...]).
pasted-from-clipboard.png⚡ Rahmenbedingungen:
- Versuche es möglichst komplett ohne Hilfsmittel und ohne Google Suche.
- Zeitliche Vorstellung für diese kleine Challenge ist um die 20 - 30 min.
- Wenn du eine Lösung hast und diese hier postest, dann bitte den Code in Spoiler einbinden, damit jeder selbst entscheiden kann ob er die Lösungsvariante der Anderen sehen möchte oder nicht 😉 .
Ich bin gespannt auf eure Lösungen und wünsche happy coding 👍 .
Viele Grüße
Sven -
Hi @Musashi ,
Danke für die Kurzvorstellung des Tools 🤝 . Auch wenn ich für solche Dinge i.d.R. nur noch VSCode nutze, schaue ich mir den Code von Nine mal etwas genauer an. Mich interessiert die Umsetzung der Liste bzw. das Füllen der Child-Daten usw. Mit solchen Controlls hatte ich schon ewig nichts mehr zu tun (zumindest nicht außerhalb vom Web/Browser).
#anschauungsobjekt 👍
Viele Grüße
Sven -
Hi AspirinJunkie ,
ja wirklich gut erklärt. Warst schneller als ich, ich wollte auch was dazu schreiben, doch dies muss ich nun nicht mehr 😅 , Danke.
Viele Grüße
Sven -
Hi Mars ,
vielen Dank für die UDF bzw. deine Implementierung 👍 .
Ich bin zwar gerade noch dabei mich mal durchzuforsten, doch bereits durch __ListExample() sehe ich den von dir beschriebenen Mehrwert 😀 .
Danke, kann sehr nützlich sein.
Viele Grüße
Sven -
Hi Alina ,
dies war unterhaltsam und kurzweilig (zumindest für den Moment) 😅 .
Danke dir 🤝 .
Viele Grüße
Sven -
Hi gert_nrw_71 ,
ich konnte dein beschriebenes Verhaltens nicht nachstellen. Ich kann mit ProcessClose() den zuvor geöffneten MS Edge schließen. Sinnvoll ist es allerdings auch, dass du mehr Code teilst, damit dir hier besser geholfen werden kann. Bitte versuche einmal folgendes Skript:Spoiler anzeigen
AutoIt
Alles anzeigen; autoit options --------------------------------------------------------------- Opt('MustDeclareVars', 1) ; initialization --------------------------------------------------------------- Global Const $sEdgeExe = 'msedge.exe' ; processing ------------------------------------------------------------------- HotKeySet('{F10}', '_CloseEdge') _StartEdge() While True Sleep(150) WEnd ; functions -------------------------------------------------------------------- Func _StartEdge() Local Const $sEdgeFolder = 'C:\Program Files (x86)\Microsoft\Edge\Application\' Local Const $sUrl = 'https://autoit.de/thread/87895-ms-edge-im-kioskmodus-beenden/?postID=709084#post709084' ShellExecute('"' & $sEdgeFolder & $sEdgeExe & '"', '--kiosk ' & $sUrl) EndFunc Func _CloseEdge() ProcessClose($sEdgeExe) Exit EndFuncMit F10 schließt du in diesem Beispiel den Edge und beendest das Skript.
MojoeB An sich ist dein Vorschlag die AutoIt WebDriver Implementierung au3Webdriver zu nutzen kein schlechter. Allerdings erfordert es eine Menge mehr (einmaligen) Aufwand um dies entsprechend einzurichten. Bei der bisher geschilderte Anforderung ist dies meiner Ansicht nach noch nicht vertretbar. Falls gert_nrw_71 mehr im Browser machen möchte/muss, automatisieren möchte etc., ist der WebDriver Ansatz definitiv zu empfehlen 👍 .
Falls du MojoeB konkrete Fragen zu diesem Thema haben solltest, öffne bitte einen Thread dazu und ich helfe dir gern 🤝 .
Viele Grüße
Sven -
Hi zusammen,
ich selbst habe bisher keine Berührungspunkte mit der UDF bzw. dem Thema gehabt, doch würde mich interessieren 🤔 , nachdem ihr beiden Ahnungslos und Moombas Einschränkungen bzw. Inkonsistenzen in der Nutzung der UDF beschrieben habt, ob ihr (natürlich gern auch andere der Community hier) Alternativen kennt, nutzt oder empfehlen könnt?
So wie beschrieben ist dies ja kein Zustand 😔 . Denn die meisten von uns vertrauen auf korrekte Abarbeitung der Funktionalität in einer UDF bzw. in Abhängigkeiten an sich, welche man in sein Projekt einbindet. Daher meine Anmerkung hier.
Ich weiß hipfzwirgel , dies hilft dir nicht, doch ggf. könnte oder sollte man die UDF überarbeiten.
Viele Grüße
Sven -
Hi Banana_2_Day ,
da ich ISN AutoIt Studio nicht als Editor nutze, bin ich hierbei sicherlich nicht der richtige Ansprechpartner.
Dies ist wohl eher ISI360 😇 .
Ich melde mich nur weil mir dein beschriebenes Szenario danach klingt, dass du in deinem "Haupt-au3" Skript, die "input-au3" per #include "input-au3" einbindest (und fertig).Vielleicht liege ich auch völlig falsch, dass wird ISI360 sicherlich aufklären, doch an sich ist ein modularer Aufbau, bei dem du GUI von Actions (Funktionen der Business Logik als Beispiel) trennst, zu empfehlen.
Mich würde mal deine Projekt-Struktur 📋 interessieren, damit ich bzgl. der Idee zum ISN AutoIt Studio dazulernen kann, doch dies vielleicht besser an anderer Stelle im Gespräch mit ISI 😀 .
Viele Grüße
Sven -
Hi Tweaky ,
ja VACUUM ist richtig. Eine kurze Google-Suche/Stackoverflow-Einträge zeigen dir schnell was nötig ist. Eigentlich nichts weiter als der Aufruf des keywords
.In deinem speziellen Fall, mit der Firefox Datenbank, bin ich nicht sicher ob du auch den auto_vacuum mode umstellen könntest (auf none oder zumindest incremental), sodass die Datenbank nicht gleich wieder so groß wird. Denn die DB wird ja durch Firefox systemseitig ge'managed.
Viele Grüße
Sven
-
Hi Tweaky ,
also soweit ich testen konnte und kurz recherchiert habe, kennt SQLite kein truncate.
Hat mich auch gewundert chesstiger 🧐 .Wenn du wirklich alle Zeilen entfernen willst, dann ist das truncate pendant, delete from, so wie du es auch bereits nutzen wolltest.
Hier eine funktionierende Version (unter Win10 mit sqlite3_x64.dll):
AutoIt
Alles anzeigen; includes --------------------------------------------------------------------- #include-once #include <Array.au3> #include <SQLite.au3> #include <SQLite.dll.au3> ; declaration ------------------------------------------------------------------ Global $sSqliteDll = 'sqlite3_x64.dll' Global $sDatabase = 'places.sqlite' Global $hDatabase ; processing ------------------------------------------------------------------- _Startup($sSqliteDll) _OpenDatabase($sDatabase) _ShowTableContent('moz_historyvisits') _ExecuteQuery('delete from moz_historyvisits;') _ShowTableContent('moz_historyvisits') _TearDown() ; functions -------------------------------------------------------------------- Func _ShowTableContent($sTableName) $aQueryResult = _QueryResultToArray('select * from ' & $sTableName & ';') _ArrayDisplay($aQueryResult) EndFunc Func _Startup($sDll) _SQLite_Startup($sDll) If @error Then MsgBox(16, 'Error', 'File "' & $sDll & '" not found.') Exit -1 EndIf EndFunc Func _OpenDatabase($sDatabase) $hDatabase = _SQLite_Open($sDatabase) If @error Then MsgBox(16, 'Error', 'Can not open database "' & $sDatabase & '".') Exit -1 EndIf EndFunc Func _QueryResultToArray($sQuery) Local $aQueryResult, $iRows, $iColumns _SQLite_GetTable2d($hDatabase, $sQuery, $aQueryResult, $iRows, $iColumns) Return $aQueryResult EndFunc Func _ExecuteQuery($sQuery) _SQLite_Exec($hDatabase, $sQuery) EndFunc Func _TearDown() _SQLite_Close() _SQLite_Shutdown() EndFuncBin gespannt ob es ggf. bei dir nicht funktioniert.
Viele Grüße
Sven -
Hi quasimodoz ,
was genau meinst du damit?Dann muss ich wohl in den sauren Apfel beißen.
Dein Skript funktioniert und du kannst es mit AutoIt nutzen aber du magst nicht den Weg wie du die Rückgabewerte des PS-Skript bekommst?
Oder was genau meinst du?
Also kurz gesagt, brauchst du noch weitere Hilfe/Tipps/Unterstützung oder ist das Thema für dich abgeschlossen?
Falls ja, dann kannst du es gern als solches, "erledigt", markieren 😀 .
Viele Grüße
Sven -
Hi quasimodoz ,
BugFix hat dir bereits eine Variante aufgezeigt, wie du Powershell in AutoIt nutzen kannst bzw. wie du mit dem Output umgehen kannst.
Hier mal noch eine weitere, über die Zwischenablage:AutoIt
Alles anzeigenGlobal $sPowershellFilePath = @ScriptDir & '\PowershellScript.ps1' Global $sPowershellCode = 'Get-Process | Select-Object -Property Id, ProcessName | Set-Clipboard' Global $sPowershellResult = _ExecutePowershellCode($sPowershellCode) ConsoleWrite($sPowershellResult & @CRLF) Func _ExecutePowershellCode($sCode) _DeleteTempFile() _WriteFile($sPowershellFilePath, $sCode) _ExecutePowershell() _DeleteTempFile() Return ClipGet() EndFunc Func _DeleteTempFile() FileDelete($sPowershellFilePath) EndFunc Func _WriteFile($sFile, $sText) Local Const $iUtf8WithoutBomAndOverwriteCreationMode = 256 + 2 + 8 Local $hFile = FileOpen($sFile, $iUtf8WithoutBomAndOverwriteCreationMode) FileWrite($hFile, $sText) FileClose($hFile) EndFunc Func _ExecutePowershell() Local $sPowershellCall = 'powershell -executionpolicy bypass -File' ShellExecuteWait(@ComSpec, '/C ' & $sPowershellCall & ' "' & $sPowershellFilePath & '"', '', '', @SW_HIDE) EndFunc- Ich gehe hier davon aus, dass powershell in den Umgebungsvariablen zu finden ist.
- Desweiteren wird auf Abschluss des Powershell Aufrufs gewartet => ShellExecuteWait.
- Danach ist das Ergebnis in der Zwischenablage und von dort kannst du ja machen was du willst 😅 .
Oftmals transformiere ich das Ergebnis in ein Array und von dort geht es dann weiter, je nach Bedarf.
Hilfreich kann auch sein, wenn du noch vor | Set-Clipboard ein Konvertierungs-Commandlet setzt wie bspw. ConvertTo-Json oder ConvertTo-Csv (Html, Xml) etc.
Get-Process | Select-Object -Property Id, ProcessName | ConvertTo-Json | Set-ClipboardUpdate
So oder so ähnlich (musst du anpassen), könnte dann dein PS-Code aus post #1 aussehen.
Viele Grüße
Sven -
Hi Dietmar ,
geht es dir am Ende immer noch darum an deinen Status (bspw. "Neu" des SVG Textes) heranzukommen?
Oder willst du danach noch mehr machen? Wie genau bist du denn jetzt an die Information, HTML-tag <text> herangekommen?
💡 Teile doch mal bitte mehr Infos mit uns und ggf. auch deinen bisherigen Code.
Natürlich können wir dir hier Beispiele für das einbetten des IEs in eine GUI geben, aber vielleicht ist das gar nicht was du brauchst.
Ansonsten hilft sicherlich schon das Beispiel in der Hilfe Referenz _IECreateEmbedded 😉 .
Viele Grüße
Sven -
Hi bobbyjames ,
welcome to the forum 👋 .- Why do you think it's worthy to add a post to an Thread which recent post was in 2011?
- Are you able to write your posts in german? I mean this is the german forum 😁 . If not maybe it's a good idea to have a look at the english forum.
Best regards
Sven -
Hi Dietmar ,
Die Seite ist nur intern verfügbar richtig? Also keine Chance deine richtige URL zu nutzen? Das wäre hilfreich.
Diese Frage steht noch aus.
Viele GrüßeSven
-
Hi Lambdax ,
auch von mir ein herzliches Willkommen 👋 .
Viel Erfolg bei deinen ambitionierten Vorhaben 👍 .
Viele Grüße
Sven