Auch wenn ich AutoIt nicht für schnelle, komplexe Programme einsetze - dafür ist ja nun wirklich nicht gemacht - hier mal eine winzige Optmierung:
Ok erstmal vorweg, der Name paßt nicht wirklich, aber da ich StringFormat in 95% aller Fälle so einsetze:
[autoit]StringFormat("Das ist ein %s usw. mit %i Wörtern", "Text", 6)
[/autoit]
da es einfach übersichtlicher ist als den String mit zig & zu zerhacken, hat diese "Funktion" eben diesen Namen.
Extremer Nachteil dabei:
StringFormat ist extrem langsam. Zum Vergleich:
Spoiler anzeigen
$iEnde = 1000
$timer = TimerInit()
For $i = 0 To $iEnde
$bla = "test" & "test" & "test"
Next
ConsoleWrite( TimerDiff($timer) & @CRLF)
$timer = TimerInit()
For $i = 0 To $iEnde
$bla = StringFormat("%s %s %s", "test", "test", "test")
Next
ConsoleWrite( TimerDiff($timer) & @CRLF)
erste Version ca. 7ms, Version mit Stringformat ca. 360ms! Wobei die Differenz je nach Größe des eigentlichen Strings natürlich zunimmt.
Was nun folgt sind die 2 "Funktionen", deren Erfindungshöhe auf 0-Niveau sind, aber für meinen Hauptanwendungszweck ca. 2,5-4mal schneller als StringFormat:
Spoiler anzeigen
Func _StringFormatSimple(ByRef $s, ByRef $a)
For $i = 1 To $a[0]
$s = StringReplace($s,"%s"&$i,$a[$i])
Next
EndFunc
; Version 2
Func _StringFormatSimple2(ByRef $s, ByRef $a)
For $i = 1 To $a[0]
$s = StringReplace($s,"%s",$a[$i],1,2)
Next
EndFunc
genau - die Funktionen machen nichts weiter als "%s" durch ein Element des übergebenen Array zu ersetzen,
Die erste Version ersetzt %sn (erstes Element %s1) global durch das Vorkommen des Platzhalters, die zweite nur das erste Vorkommen des Platzhalters. Wobei die erste Version wesentlich langsamer ist wie die zweite.
Ein Parameter zum wechseln des Modi würde das Ganze wieder langsamer machen, deswegen zwei Funktionen.
Auch ein UBound würde um ca. 5% bremsen, deswegen die Übergabe per Array, auch wenn gemischte Datentypen dort auch nicht optimal sind.
Der Aufruf ist etwas ungewöhlich:
Spoiler anzeigen
$var[0] = 3
$var[1] = "test1"
$var[2] = "test2"
$var[3] = "test3"
$sString = "%s %s %s"
_StringFormatSimple4($sString, $var)
Also mehr zur Info als Funktion, aber vielleicht kann ja jemand damit was anfangen