Nein, ausblenden kann man 'Cols' nicht, es gibt kein Flag wie bei den Rows ($ARRAYDISPLAY_NOROW).
Du kannst die Spaltenüberschriften aber selbst festlegen, siehe Parameter 6 ($sHeader) aus der Hilfe zu _ArrayDisplay .
Code_ArrayDisplay($aErgebnis, "Browser- und WebDriver-Versionen", "1:", $ARRAYDISPLAY_NOROW + $ARRAYDISPLAY_COLALIGNCENTER, Default, _ArrayToString($aErgebnis, "|", 0, 0))Super, perfekte Unterstützung hier! AutoIt hat so viele Feinheiten, dass man manchmal den Wald vor lauter Bäumen nicht sieht. Hatte diese Titel-Funktion bei _ArrayDisplay() noch nie benutzt.
Noch eine Frage aber ziemlich unwichtig: kann man die leere Zeile und Spalte unten und rechts noch wegbekommen?
Beiträge von HansJ54
-
-

Bei mir ist es genau umgekehrt. Ich versuche (meist ohne Erfolg) die automatische Updatefunktion dauerhaft zu deaktivieren. Ursache: Viele Updates verschlimmbessern das Programm, da warte ich lieber ab, bis die durch das Update hervorgerufenen Probleme behoben sind.
Windows-Updates warte ich auch ein wenig, aber Browser-Updates hätte ich gerne sofort bei unseren Rechnern. Da ist es egal, wenn mal einer Probleme macht - gibt ja genügend verschiedene.
Kann man beim _ArrayDisplay() neben den Rows auch noch die Titel "Cols" ausblenden? Habe nichts gefunden.
-
Moin,
hier mal eine Variante mit gezielter Schlüsselauswahl. Damit können die Sektionen unterschiedliche Schlüssel in beliebiger Reihenfolge enthalten.
Funktioniert auch super, wobei ich in der neuen Version die Schlüssel nicht fest vergebe, sondern vorab alle vorhandenen Keys auslese. Habe noch "Sortieren" eingefügt und eine Zeile zur Anzeige des neuesten Softwarestands aus der Liste. Lässt sich sicher noch optimieren
Code
Alles anzeigen#include <Array.au3> Global $sIniDatei = @ScriptFullPath Global $aErgebnis = Ini2Array($sIniDatei, True, True) ; sort sections and keys $aErgebnis[0][0] = "Client" Local $aRowLatest = _ArrayFindAll($aErgebnis, "Latest") ; row for latest version For $i = 1 To UBound($aErgebnis, $UBOUND_COLUMNS) - 1 $aErgebnis[$aRowLatest[0]][$i] = _ArrayMax($aErgebnis, 0, 1, $aRowLatest[0], $i) Next _ArrayDisplay($aErgebnis, "Browser- und WebDriver-Versionen", "", $ARRAYDISPLAY_NOROW) Func Ini2Array($sIni, $bSortSections, $bSortKeys) Local $aKeys = IniGetAllKeys($sIni) If $bSortKeys Then _ArraySort($aKeys) Local $aSectionNames = IniReadSectionNames($sIni) If $bSortSections Then _ArraySort($aSectionNames) If @error Then Return SetError(@error, 0, 0) Local $aResult[UBound($aSectionNames)][UBound($aKeys)] Local $iMax = UBound($aKeys) - 1 For $I = 0 To $iMax $aResult[0][$I] = $aKeys[$I] Next Local $sSection For $I = 1 To $aSectionNames[0] $sSection = $aSectionNames[$I] $aResult[$I][0] = $sSection For $J = 1 To $iMax $aResult[$I][$J] = IniRead($sIni, $sSection, $aKeys[$J], "---") Next Next Return $aResult Endfunc Func IniGetAllKeys($sIni) Local $aKeys[0] Local $sData = "|" Local $aSections = IniReadSectionNames($sIni) For $i = 1 To $aSections[0] Local $aInhalt = IniReadSection($sIni, $aSections[$i]) If @error = 0 Then For $j = 1 To $aInhalt[0][0] If Not StringInStr($sData, "|" & $aInhalt[$j][0] & "|") Then $sData &= $aInhalt[$j][0] & "|" Next EndIf Next If StringRight($sData, 1) = "|" Then $sData = StringTrimRight($sData, 1) _ArrayAdd($aKeys, $sData) Return $aKeys EndFunc #Region eingebettete INI #cs [Latest] [BLP1-WX] EdgeVersion=105.0.1293.63 FirefoxVersion=103.0.3.8255 ChromeVersion=105.0.5112.102 OfficeVersion=16.0.10389.20033 [BLP3-WX] ChromeVersion=104.0.5112.102 EdgeVersion=104.0.1293.63 FirefoxVersion=103.0.2.8255 OfficeVersion=16.0.10389.20033 [BLP2-WX] EdgeVersion=104.0.1293.63 ChromeVersion=104.0.5112.102 FirefoxVersion=103.0.2.8255 OfficeVersion=16.0.10389.20033 [BLP4-WX] ChromeVersion=104.0.5112.102 EdgeVersion=105.0.1293.63 FirefoxVersion=104.0.2.8255 OfficeVersion=16.0.10389.20033 [BLP5-WX] ChromeVersion=104.0.5112.102 EdgeVersion=104.0.1293.63 FirefoxVersion=103.0.2.8255 OfficeVersion=16.0.10389.20033 [BLP6-WX] ChromeVersion=104.0.5112.102 EdgeVersion=104.0.1293.63 FirefoxVersion=103.0.2.8255 OfficeVersion=16.0.10389.20033 [WebDriver] ChromeVersion=104.0.5112.79 EdgeVersion=104.0.1293.63 FirefoxVersion=0.31.1 #ce #EndRegion eingebettete INI -
HansJ54 Probier nochmal bitte, habs mal oben angepasst.
Perfekt, sowohl bei vollständigen 4 Einträgen pro Sektion wie auch bei fehlenden Einträgen:
Und auch bei fehlenden Einträgen passt es:
Und selbst wild gemischt in der Reihenfolge bei den einzelnen Sektionen funktioniert es:
Und mit einem abschließenden _ArrayTranspose() ist es für meine Zwecke optimal (es können schon mal knapp 20 PCs sein und die stehen besser untereinander, Versions sind es momentan nur 6).
Vielen Dank, spart mir heute Abend die zusätzliche Arbeit.
Ein wenig Hintergrund, warum ich das mache:
wir schaffen es nicht, dass sich auf allen Rechnern die Browser automatisch aktualisieren sobald ein Update vorliegt. Für Chrome und Edge habe ich als Workaround die Startseiten chrome://settings/help bzw. edge://settings/help eingestellt, so dass sich beim Start immer automatisch die Updates installieren. Für Firefox habe ich noch keinen Workaround gefunden. Wobei überall wo möglich "Updates automatisch installieren" eingestellt ist - funktioniert einfach nicht. Falls jemand dazu eine Idee hat: her damit!
-
pasted-from-clipboard.pngWie wäre es damit? HansJ54
Auch nicht schlecht, aber für meine Zwecke sollte man die Werte der ersten Spalte zusammenführen
Aber da arbeite ich gerade dran, heute nach Feierabend geht's weiter. -
Eine fertige Funktion gibt es dafür nicht.
Ich würde es so machen
AutoIt
Alles anzeigen#Region ;************ Includes ************ #include <Array.au3> #EndRegion ;************ Includes ************ Global $aErgebnis[1][5] $sDatei = "D:\test.ini" $aSektions = IniReadSectionNames($sDatei) For $i = 1 To UBound($aSektions) - 1 $aInhalt = IniReadSection($sDatei, $aSektions[$i]) ; Spaltenüberschriften If $i = 1 Then _ArrayAdd($aErgebnis, "PC" & "|" & $aInhalt[1][0] & "|" & $aInhalt[2][0] & "|" & $aInhalt[3][0] & "|" & $aInhalt[4][0]) _ArrayAdd($aErgebnis, $aSektions[$i] & "|" & $aInhalt[1][1] & "|" & $aInhalt[2][1] & "|" & $aInhalt[3][1] & "|" & $aInhalt[4][1]) Next _ArrayDisplay($aErgebnis)Funktioniert für meine Zwecke perfekt, vielen Dank. Allerdings nur, da ich in jeder Sektion immer genau 4 Einträge habe. Die Spaltenüberschriften kann man daher auch innerhalb der Schleife bei $i = 1 setzen.
Andy: Wenn ich mal ein wenig Zeit habe, dann versuche ich es mal auf "allgemein" umzuschreiben mit unterschiedlich vielen Einträgen pro Sektion.
-
Ich habe mal wieder mindestens 10 Minuten gesucht und einige alte Beispiele gefunden, habe aber Probleme damit, laufen teilweise nicht (z.B. von Nuts aus 2018).
Ich habe eine ini-Datei wie folgt:
[BLP1-WX]
ChromeVersion=104.0.5112.102
FirefoxVersion=103.0.2.8255
EdgeVersion=104.0.1293.63
OfficeVersion=16.0.10389.20033
[BLP2-WX]
ChromeVersion=104.0.5112.102
FirefoxVersion=103.0.2.8255
EdgeVersion=104.0.1293.63
OfficeVersion=16.0.10389.20033
[BLP3-WX]
ChromeVersion=104.0.5112.102
FirefoxVersion=103.0.2.8255
EdgeVersion=104.0.1293.63
OfficeVersion=16.0.10389.20033
[BLP4-WX]
...
und möchte die "lesbar" in einem einfachen 2D-Array anzeigen:
Spaltenüberschriften:
PC ChromeVersion FirefoxVersion EdgeVersion OfficeVersion
Zeilen:
BLPx-WX und dahinter die 4 Softwareversionen des jeweiligen PCs
Könnte ich mir mit ein paar Schleifen zurechtbasteln, aber dafür gibt es doch sicher schon was Fertiges wie _FileReadIniToArray() ?

Vielen Dank!
-
Zuerst habe ich in der Hilfe nachgeschaut unter "Function Reference" / "String Management" und übersehen, dass es noch mehr String-Funktionen gibt unter "User Defined Functions Reference". Das ist zu tief unten in der Liste

Und bei Google muss man erstaunlich genau treffen, der findet doch sonst auch allen möglichen Kram auch wenn man nicht exakt sucht.
Schönes Wochenende zusammen!
-
Diesmal im Forum und bei Google gesucht und wieder nichts gefunden, obwohl in anderen Programmiersprachen Standard (bin dabei meine Scripte ein wenig zu durchforsten):
Ich suche eine Funktion, mit der ich n mal die Zeichenfolge "$sText" erzeugen kann. Mit einer For-Schleife ist das einfach, aber gibt es keine direkte Funktion in AutoIt? Oder vielleicht irgendetwas mit RegEx (wovon ich sehr wenig Ahnung habe)?
_StringDup(10, "x") => "xxxxxxxxxx" oder
_StringDup(7, "xy") => "xyxyxyxyxyxyxy"
-
Die forumsinterne Suchfunktion kann man weitgehend vergessen. Wenn Du
Autoit Strings sortieren nach Länge , z.B. bei Google, eingibst, dann ist Oscar's Beitrag Treffer 1
.Muss ich mir merken

-
Danke, perfekte Lösung!
Ich habe tatsächlich aber vorher im Forum gesucht und nichts gefunden

Selbst mit "strings nach länge sortieren" kommt nur dieser mein Thread.
-
Ich möchte ein eindimensionales Array mit Texten nach der Länge der Texte sortieren, längster Text zuerst. Das bekomme ich irgendwie hin, aber vielleicht hat jemand schon so etwas gemacht?
-
-
Noch eine Frage an Oscar - klappt auch so einwandfrei, aber in einigen Fällen sieht man etwas zu wenig in bestimmten Spalten (genauer gesagt, in der 2. Spalte):
_GUICtrlListView_SetColumnWidth($__g_idArrayShow2D_LV, $iCol, $LVSCW_AUTOSIZE)
Damit wird anscheinend automatisch die Spaltenbreite gesetzt, richtig? Was muss ich ändern, um da noch eine minimale Spaltenbreite vorzugeben? Brauche ich nur, wenn überhaupt, für die 2. Spalte - also nicht unbedingt als unterschiedliche Vorgabe für alle Spalten. Oder halt 1 Wert für alle Spalten.
-
-
-
Vielen Dank noch mal für die Hilfe, funktioniert ebenfalls perfekt!
Da ich es auf die Schnelle nicht komplett verstanden habe, wo die Problematik liegt (und wenn ich nicht zu viel Aufwand verursache)

Könnte man das Copy to Clipboard auch auf ein einzelnes angeklicktes Feld beschränken? Es ist oft eine Vertragsnummer oder eine Telefonnummer, die rauskopiert werden soll, nicht die ganze Zeile. Das allein hilft natürlich auch schon, da man ja den nicht benötigten Rest rauslöschen kann, aber vielleicht gibt es ja eine Erweiterung von Zeile auf Feld?
-
Das ist die wirklich optimale Lösung, danke!

Wenn wir schon mal dabei sind: in einigen Fällen wäre es hilfreich, wenn ich einen Eintrag markieren und kopieren könnte. Das geht mit diesem Beispiel nicht, gibt es da noch eine Möglichkeit?
Es könnte ja z.B. eine Textanzeige sein, bei der aber die Spalten exakt untereinander stehen müssten.
-
Ich nutze das für verschiedene Tabellen, meistens brauche ich die erste Spalte als Beschriftung und dann irgendeine einzelne andere. Es gibt aber auch Fälle, da sind es 2 oder mehr andere, die nicht unbedingt nebeneinander liegen. Also so, wie es mein Programm mit der Kopie macht: Vorgabe n Spalten, Ausgabe n Spalten.
Spoiler anzeigen
Daten: KdNr 1234 3421 6543 3422 5334 Verbindung 1234 3421 6543 3421 5334 Name Schmitz Müller Schulz Müller Maier Vorname Klaus Michael Hans Josefine Josef Strasse Hauptstr. Im Grund Weststr. Im Grund Nebenstr. Hausnummer 35 6 22b 6 3 Plz 50000 40000 40000 40000 80000 Ort Köln Düsseldorf Hamburg Düsseldorf München Wahl: 1234 KdNr 1234 Verbindung 1234 Name Schmitz Vorname Klaus Strasse Hauptstr. Hausnummer 35 Plz 50000 Ort Köln Wahl: 3421 (suche die Nr. in Verbindung) KdNr 3421 3422 Verbindung 3421 3421 Name Müller Müller Vorname Michael Josefine Strasse Im Grund Im Grund Hausnummer 6 6 Plz 40000 40000 Ort Düsseldorf Düsseldorf Die Suche der Spalten ist übrigens kein Problem, die Vorgabe für das neue ArrayDisplay wäre immer nur so etwas wie : $sCols = "1|3|5|9" - die tatsächlichen Tabellen sind wesentlich komplexer und teilweise über 2. und 3. Tabellen indiziert, also keine Arbeit in die Suche stecken

-