Die TreeView-Funktionen sind m.M. noch nicht ausgereift. Das Übernehmen von Änderungen funktioniert ja auch mit dem Original Hilfebsp. nicht wirklich. Egal was ich reinschreibe, es wird nur das erste Zeichen übernommen. ![]()
Ist zwar etwas aufwändiger, aber sicher: Schreibe dein eigenes Edit-Tool, so wie ich es für ListView-Editierung gemacht hatte.
Beiträge von BugFix
-
-
Ich mag aber nicht bei Neustart löschen, da ich mein Laptop nie (oder fast nie) neustarte sondern nur in Hibernate schicke. Also lösche ich gelockte Dateien lieber sofort mit Unlocker von Softonic.

-
Neue Version (Funktionen hinzugefügt), s. Post 1.
-
das ist der Fehler der kommt
[autoit]
Ach ja, hatte ich übersehen:
StattTo UBound($aResult)
[/autoit]musst du
[autoit]To UBound($aResult) -1
[/autoit]verwenden.
-
das problem ist nun wenn ein SubArray leer ist
SubArray bedeutet Array im Array - und du prüfst ja auch mit IsArray ==> du hast aber nur ein 2D-Array mit normalen Einträgen.Also nur auf Inhalt prüfen:
[autoit]; _ArrayDisplay($aResult)
[/autoit]
For $i = 1 To UBound($aResult)
If $aResult[$i][4] <> '' Then _ArrayAdd($ARRAY, $aResult[$i][4])
Next
If UBound($ARRAY) - 1 <> 0 Then
For $i = 1 To UBound($ARRAY) - 1
_GUICtrlListView_AddItem($ListView1, $ARRAY[$i])
Next
EndIf -
Dein Code ist nicht wirklich aussagefähig. Du sprichst von Array im Array - ich hab keine Ahnung woher das kommen soll. Insofern war mein Hinweis auch eher rudimentär.
-
[autoit]
If IsArray($aResult[$i][4]) <> '' Then
[/autoit]Du willst prüfen ob im Array ein Array ist. Diese Prüfung gibt aber nur 1 oder 0 zurück. Deine Prüfung auf "<> ''" ist also falsch. Verwende:
[autoit]If Not IsArray($aResult[$i][4]) Then
[/autoit] -
Hier mal, wie es bei einem 3D und 4D
(für 4D war ich zu faul :D)aussehen könnte:Edit: Konnte meine Faulheit überwinden

Spoiler anzeigen
[autoit]; === Konfigurationsdatei Bsp.
[/autoit] [autoit][/autoit] [autoit]
; === Anzahl der Zeilen ist UBound für Dimension 1
; === durch Pipe "|" getrennte Blöcke ergeben Dimension 2
; === kommagetrennt Blöcke innerhalb der Pipe-getrennten Blöcke ergeben Dimension 3
Local $file = _
'Sub1_1_1,Sub1_1_2,Sub1_1_3|Sub1_2_1,Sub1_2_2,Sub1_2_3|Sub1_3_1,Sub1_3_2,Sub1_3_3' & @CRLF & _
'Sub2_1_1,Sub2_1_2,Sub2_1_3|Sub2_2_1,Sub2_2_2,Sub2_2_3|Sub2_3_1,Sub2_3_2,Sub2_3_3' & @CRLF & _
'Sub3_1_1,Sub3_1_2,Sub3_1_3|Sub3_2_1,Sub3_2_2,Sub3_2_3|Sub3_3_1,Sub3_3_2,Sub3_3_3' & @CRLF & _
'Sub4_1_1,Sub4_1_2,Sub4_1_3|Sub4_2_1,Sub4_2_2,Sub4_2_3|Sub4_3_1,Sub4_3_2,Sub4_3_3' & @CRLF & _
'Sub5_1_1,Sub5_1_2,Sub5_1_3|Sub5_2_1,Sub5_2_2,Sub5_2_3|Sub5_3_1,Sub5_3_2,Sub5_3_3' & @CRLF & _
'Sub6_1_1,Sub6_1_2,Sub6_1_3|Sub6_2_1,Sub6_2_2,Sub6_2_3|Sub6_3_1,Sub6_3_2,Sub6_3_3' & @CRLF; === Anzahl der Zeilen ist UBound für Dimension 1
[/autoit] [autoit][/autoit] [autoit]
; === durch Pipe "|" getrennte Blöcke ergeben Produkt aus: Ubound Dimension 2 * Ubound Dimension 3
; === kommagetrennt Blöcke innerhalb der Pipe-getrennten Blöcke ergeben Dimension 4
Local $file2 = _
'Sub1_1_1_1,Sub1_1_1_2|Sub1_1_2_1,Sub1_1_2_2|Sub1_1_3_1,Sub1_1_3_2|Sub1_2_1_1,Sub1_2_1_2|Sub1_2_2_1,Sub1_2_2_2|Sub1_2_3_1,Sub1_2_3_2|Sub1_3_1_1,Sub1_3_1_2|Sub1_3_2_1,Sub1_3_2_2|Sub1_3_3_1,Sub1_3_3_2' & @CRLF & _
'Sub2_1_1_1,Sub2_1_1_2|Sub2_1_2_1,Sub2_1_2_2|Sub2_1_3_1,Sub2_1_3_2|Sub2_2_1_1,Sub2_2_1_2|Sub2_2_2_1,Sub2_2_2_2|Sub2_2_3_1,Sub2_2_3_2|Sub2_3_1_1,Sub2_3_1_2|Sub2_3_2_1,Sub2_3_2_2|Sub2_3_3_1,Sub2_3_3_2' & @CRLF & _
'Sub3_1_1_1,Sub3_1_1_2|Sub3_1_2_1,Sub3_1_2_2|Sub3_1_3_1,Sub3_1_3_2|Sub3_2_1_1,Sub3_2_1_2|Sub3_2_2_1,Sub3_2_2_2|Sub3_2_3_1,Sub3_2_3_2|Sub3_3_1_1,Sub3_3_1_2|Sub3_3_2_1,Sub3_3_2_2|Sub3_3_3_1,Sub3_3_3_2' & @CRLF & _
'Sub4_1_1_1,Sub4_1_1_2|Sub4_1_2_1,Sub4_1_2_2|Sub4_1_3_1,Sub4_1_3_2|Sub4_2_1_1,Sub4_2_1_2|Sub4_2_2_1,Sub4_2_2_2|Sub4_2_3_1,Sub4_2_3_2|Sub4_3_1_1,Sub4_3_1_2|Sub4_3_2_1,Sub4_3_2_2|Sub4_3_3_1,Sub4_3_3_2' & @CRLF & _
'Sub5_1_1_1,Sub5_1_1_2|Sub5_1_2_1,Sub5_1_2_2|Sub5_1_3_1,Sub5_1_3_2|Sub5_2_1_1,Sub5_2_1_2|Sub5_2_2_1,Sub5_2_2_2|Sub5_2_3_1,Sub5_2_3_2|Sub5_3_1_1,Sub5_3_1_2|Sub5_3_2_1,Sub5_3_2_2|Sub5_3_3_1,Sub5_3_3_2' & @CRLF & _
'Sub6_1_1_1,Sub6_1_1_2|Sub6_1_2_1,Sub6_1_2_2|Sub6_1_3_1,Sub6_1_3_2|Sub6_2_1_1,Sub6_2_1_2|Sub6_2_2_1,Sub6_2_2_2|Sub6_2_3_1,Sub6_2_3_2|Sub6_3_1_1,Sub6_3_1_2|Sub6_3_2_1,Sub6_3_2_2|Sub6_3_3_1,Sub6_3_3_2' & @CRLF; === Array erstellen aus Datei
[/autoit] [autoit][/autoit] [autoit]
Local $aD1 = StringSplit($file, @CRLF, 1), $aLine, $aData
Local $array3D[$aD1[0]][3][3]For $i = 1 To $aD1[0] -1
[/autoit] [autoit][/autoit] [autoit]
$aLine = StringSplit($aD1[$i], '|')
For $j = 1 To 3
$aData = StringSplit($aLine[$j], ',')
For $k = 1 To 3
$array3D[$i-1][$j-1][$k-1] = $aData[$k]
ConsoleWrite($i-1 & '-' & $j-1 & '-' & $k-1 & ': ' & $aData[$k] & @CRLF)
Next
Next
NextConsoleWrite(@CRLF & 'Jetzt 4D-Array' & @CRLF & @CRLF)
[/autoit] [autoit][/autoit] [autoit]
$aD1 = StringSplit($file2, @CRLF, 1)
Local $array4D[$aD1[0]][3][3][2], $iD2, $iD3For $i = 1 To $aD1[0] -1
[/autoit]
$aLine = StringSplit($aD1[$i], '|')
$iD2 = 0
$iD3 = 0
For $j = 1 To 9 ; Ubound_D2 * UBound_D3
$aData = StringSplit($aLine[$j], ',')
For $k = 1 To 2
$array4D[$i-1][$iD2][$iD3][$k-1] = $aData[$k]
ConsoleWrite($i-1 & '-' & $iD2 & '-' & $iD3 & '-' & $k-1 & ': ' & $aData[$k] & @CRLF)
Next
$iD2 += 1 ; === die Indexe verhindern zu sehr verschachtelte Schleifen, 3-fach For reicht
If $iD2 = 3 Then
$iD2 = 0
$iD3 += 1
If $iD3 = 3 Then $iD3 = 0
EndIf
Next
Next
In die Datei zu Schreiben ist dann einfach nur die Umkehrung des obigen Codes. -
Deine Konstruktion ist etwas unglücklich. Arbeite doch lieber gleich mit 3 oder 4 Dimensionen. Dann hat man eine feste Zuordnung.
Das von dir beschriebene Array ließe sich so schreiben (ungetestet):Spoiler anzeigen
[autoit]Local $aInfo['Anzahl der Funktionen'][11]
[/autoit] [autoit][/autoit] [autoit]
Local $path = 'Dateipfad'
Local $tmp, $sWrite = ''
Local $Delim = ';' ; dein gewünschtes TrennzeichenFor $i = 0 To UBound($aInfo) -1
[/autoit] [autoit][/autoit] [autoit]
For $j = 0 To UBound($aInfo, 2) -1
$tmp = $aInfo[$i][$j]
$sTmp = ''
If IsArray($tmp) Then
Local $2nd = UBound($tmp, 2)
If @error Then $2nd = 0
For $k = 0 To UBound($tmp) -1
If $2nd Then
For $l = 0 To $2nd -1
$sTmp &= $tmp[$k][$l] & $Delim
Next
Else
$sTmp &= $tmp[$k] & $Delim
EndIf
$sTmp &= @CRLF
Next
$sWrite &= $sTmp & $Delim & @CRLF
Else
$sWrite &= $tmp & $Delim
EndIf
Next
$sWrite &= @CRLF
NextFileWrite($path, $sWrite)
[/autoit]Aber das Wiedereinlesen würde sicher eine Katastrophe
.
Arbeite doch von Anbeginn mit einer SQLite-DB. -
Alternativ (würde ich bevorzugen):
[autoit]Local $a = 4, $b = 3
[/autoit][autoit][/autoit][autoit]ConsoleWrite(' a + b = ' & _Calc($a, $b, 1) & @CRLF)
[/autoit][autoit][/autoit][autoit]ConsoleWrite(' a - b = ' & _Calc($a, $b) & @CRLF)
[/autoit][autoit][/autoit][autoit]Func _Calc($Val1, $Val2, $Operand=-1)
[/autoit]
Return $Val1 + $Val2 * $Operand
EndFunc -
- Freiwillige Tätigkeit
gepostet in Forum: ../AutoIt 3/JobbörseWas ist an dem Forumsnamen so mißverständlich? Hier wird gehandelt: Suche.. Biete.
[verschiebe nach: ..\Projekte]
-
Hab jetzt noch nicht nachgeschaut - hast du auch die strafverschärfende Tatbestände berücksichtigt?( z.B. 2-mal innerhalb von 12 Monaten außerorts >21 km/h zu schnell ==> Fahrverbot 4 Wochen)
Gibt da noch einiges mehr.
Nach 8 Punkten gibts auch noch ein kostenpflichtiges Info-Schreiben (Sie haben jetzt 8 Punkte. Mit dem Besuch von kostenpflichtigen Seminaren können Sie einmalig Punkte abbauen....) -
Mehrstufig sortieren kannst du über einen Umweg mit SQL: https://autoit.de/index.php?page…46336#post46336
-
so:
[autoit]$muster1 = '-abc2456gjs-'
[/autoit][autoit][/autoit][autoit]
$muster2 = '-12345678-'$ret = StringRegExpReplace($muster1, '-(\d*)-', '$1')
[/autoit][autoit][/autoit][autoit]
ConsoleWrite($ret & @crlf)$ret = StringRegExpReplace($muster2, '-(\d*)-', '$1')
[/autoit]
ConsoleWrite($ret & @crlf) -
-
-
und einziger nachteil ist egtl das es langsamer ist als z.b. die string... funktionen
Nicht generell - komplexe StringRegExReplace sind deutlich schneller als vergleichbare Stringbefehl Konstrukte. Nach meiner Erfahrung nimmt vergleichsweise die Geschwindigkeit von RegExp deutlich zu, je länger der Text wird. -
Zeilen und Spalten kannst du automatisch abfragen, habs mal angepaßt.
Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]
Local $oWord = ObjCreate("Word.Application")
$oWord.Visible = False
Local $oDoc = $oWord.Documents.Open ('C:\tabelle.doc')
Local $zeilen = $oDoc.Tables(1).Rows.Count
Local $spalten = $oDoc.Tables(1).Columns.Count
Local $array[$zeilen][$spalten]
Local $txtFor $i = 1 To $zeilen
[/autoit] [autoit][/autoit] [autoit]
For $j = 1 to $spalten
$txt = StringTrimRight($oDoc.Tables(1).Cell($i, $j).Range.Text, 2)
$array[$i-1][$j-1] = $txt
Next
Next;~ _ArrayDisplay($array)
[/autoit] [autoit][/autoit] [autoit]$oDoc.Close
[/autoit]
$oWord.QuitZitatWie bekomm ich es jetz hin, dass er Word nicht öffnet?
Gar nicht

Word muß ja geöffnet werden - nur halt nicht sichtbar. Für das Word Objekt gibt es da nur: $object.Visible = False
Kann mir nicht vorstellen, dass das fehlschlägt. Welche Office Version hast du denn? -
-
Ganz simpel:
[autoit]#include <Array.au3>
[/autoit][autoit][/autoit][autoit]
$oWord = ObjCreate("Word.Application")
$oWord.Visible = False
$oDoc = $oWord.Documents.Open ('C:\Dein_Pfad.doc')
Local $array[10][5] ; hier die Größe deines Ziel-Arrays [Zeilen][Spalten] eintragen
Local $txtFor $i = 1 To 10 ; entsprechend Zeilenzahl
[/autoit][autoit][/autoit][autoit]
For $j = 1 to 5 ; entsprechend Spaltenzahl
$txt = StringTrimRight($oDoc.Tables(1).Cell($i, $j).Range.Text, 2)
; ConsoleWrite($txt & @CRLF)
$array[$i-1][$j-1] = $txt
Next
Next$oDoc.Close
[/autoit]
$oWord.Quit