Hm welcher Schritt genau ist unklar?
Beiträge von nuts
-
-
Deine Listbox ist doch mit Dateinamen der .ini's gefüllt.
[autoit]
Diese auszulesen klappt ja oder?
[/autoit][autoit][/autoit][autoit]
$name = "" ; Kommt von deiner Listbox
$searchstring = "" ;der gesuchte Sektionsname
$ergebnis ;hier werden treffer zwischen gespeichert
$asections=IniReadSectionNames($name)
for $i = 0 to UBound($asections)-1
if $asections[$i] = $searchstring then $ergebnis &= $asections[$i] & "|"
next;$ergebnis enthält jetzt alle .ini Namen mit der gesuchten Sektion, abgetrennt von einem "|"
[/autoit] -
Für jede Ini ein Array mit allen Sektionsnamen erstellen (Inireadsektionnames).
Jeden Eintrag dieses Array mit dem Suchstring vergleichen und bei einem Treffer das Ergebnis zwischen speichern.Am Ende die Listbox leeren und mit den Treffern wieder befüllen.
-
Ja habe nur schnell auf die .exe geklickt und den Source im Forum überflogen.
edit \ Bei "Berechnen M-1" tritt der Fehler auf.
Ist auch ein kleiner optischer Fehler, da 1,2 usw. auf diesen Buttons nicht ganz dargestellt werden. -
Das Skript bricht ab sobald man den angesprochenen Button drückt und noch gar keine Wert eingegeben hat.
Die Zeilen könnte man auch for ... next Schleifen verkürzen.
Würde ich mal behaupten, habs nur überflogen. -
Hey,
du solltest auf jeden Fall ein besseres @error-handling einbauen.
z.B. wenn man nach dem Start auf en Button "'Berechnen M-" drückt bricht das Skript ab.
Immer wenn man den Input nicht vorhersehen (User-Eingabe) kann, sollte ein Abfrage folgen.
Das ist ggf. aufwendiger als das eigentliche Skript, trotzdem sehr wichtig
Zeile 245 bis 385 könnte man vermutlich extrem kürzen.
-
P.S: Ich arbeite trotzdem mit der Syntax If StringInStr($Name, "tag") <> 0 Then
Und wieso?
In Autoit "bedeutet" true 1 und false 0.
If XY then YZ ausgeschrieben: Falls XY wahr ist dann mache YZ
Zumindest habe ich das so verstanden. -
Erst Filefindfirstfile verwenden.
[autoit]
[/autoit][autoit][/autoit][autoit]
; Shows the filenames of all files in the current directory
$search = FileFindFirstFile("*.*"); Check if the search was successful
[/autoit][autoit][/autoit][autoit]
If $search = -1 Then
MsgBox(0, "Error", "No files/directories matched the search pattern")
Exit
EndIfWhile 1
[/autoit][autoit][/autoit][autoit]
$file = FileFindNextFile($search)
If @error Then ExitLoop
MsgBox(4096, "File:", $file)
WEnd; Close the search handle
[/autoit]
FileClose($search) -
Filewrite möchte das entsprechende Filehandle (bekommst du über Fileopen -> s. Hilfe).
edit \ bzw. nimm doch einfach _FileWriteFromArray
-
-
Wie klappt nichts?
Was zeigt die msgbox denn? -
Auf jeden Fall keine Leerzeichen vor und hinter dem "=" in einer .ini verwenden.
[autoit]
Sowas führt ggf. zu Problemen.
[/autoit]
$a = InputBox ("Vokabel","Vokabel eingeben")
$input_ini = IniRead("C:\Users\Robert\Desktop\LateinRobb.ini", "Latein", $a, "Gibts (noch) nicht")
MsgBox(0,"",$a & " = " &$input_ini) -
Mach doch mal eine @error-Abfrage nach Inireadsectionnames.
-
Poste doch mal dein Skript mit deinem Array.
Kann ja nicht sein
-
Die _Arraydelete Zeile verwirrt etwas.
_Arrayunique funktioniert aber
[autoit]
[/autoit][autoit][/autoit][autoit]
#include <Array.au3>Dim $aArray[10] = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
[/autoit]
_ArrayDisplay($aArray, "$aArray")
$aNewArray = _ArrayUnique($aArray) ;Using Default Parameters
_ArrayDisplay($aNewArray, "$aNewArray represents the 1st Dimension of $aArray") -
Mach doch mal eine @error-Abfrage nach Inireadsection.
Das Array wird erst gar nicht erstellt (ini nicht gefunden, Section nicht gefunden usw.) -
Also so richtig hängt das vom genauen Problem ab. Viele Wege führen nach Rom
z.B. könnte man in einer For ... next Schleife jeden Eintrag vom 1D Array durchgehen und das 2D Array befüllen. -
Besser wäre es erst alle 1D Arrays zu erstellen (Stringsplit, whatever) und anschließend das 2D Array gleich in der richtigen Größe zu deklarieren.
Redim ist laaaaangsam
-
Möglicherweise.

Auf jeden Fall ist Schnitzel auch gut dabei.Das lässt sich aber bestimmt noch optimieren.
-
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
* egal was ) T<Nummer (auch mehrere Zahlen) ( * egal was ) <Klammer auf> ( * egal was) <Klammer zu>
#include <Array.au3>
#include <File.au3>
#include <string.au3>
Global $aTest
_FileReadToArray(@ScriptDir & "\test.txt", $aTest)
_ArrayDisplay($aTest)
#cs
[ _
'N182 G74 Z-1 L1', _
'N183 G74 x200 Y-1 L1', _
'N184 G7', _
'N83 (2: T1 2D ANSCHLAGKANTE FRAESEN)', _
'N186 S1800 T3 M6 (HM - Schlichtfraeser D=20,0)', _
'N187 G39 C3=1', _
'N188 G74 Z-1 L1']
#ce$pattern = '(T\d+)(.*)(\(.*\))' ;nuts
[/autoit] [autoit][/autoit] [autoit]
$pattern2 = '(T\d+)(?:[^(^\r]*)(\([^)]*)' ;bugfix
$pattern3 = '(T\d+)(?:[^(^\r]*)(\([^)]*\))' ;bugfix seins mit Klammer am Ende$time = TimerInit()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
For $i = 0 To $aTest[0]
$ret = StringRegExp($aTest[$i], $pattern3, 3)
If @error Then ContinueLoop
;ConsoleWrite('Werkzeug: ' & $ret[0] & ' ' & $ret[1] & @CRLF)
Next
ConsoleWrite("Bugfix mit Klammer :" & $time & @CRLF)$time1 = TimerInit()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To $aTest[0]
$ret = StringRegExp($aTest[$i], $pattern2, 3)
If @error Then ContinueLoop
;ConsoleWrite('Werkzeug: ' & $ret[0] & ' ' & $ret[1] & ')' & @CRLF)
Next
ConsoleWrite("Bugifx :" & $time1 & @CRLF)$time2 = TimerInit()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To $aTest[0]
$ret = StringRegExp($aTest[$i], $pattern, 3)
If @error Then ContinueLoop
;ConsoleWrite('Werkzeug: ' & $ret[0] & ' ' & $ret[2] & @CRLF)
Next
ConsoleWrite("Nuts :" & $time2 & @CRLF)$time3 = TimerInit()
[/autoit]
Dim $ergebnis[1]
For $i = 1 To $aTest[0]
$between = _StringBetween($aTest[$i], ' (', ')')
If Not @error Then
$aTest[$i] = StringTrimRight($aTest[$i], StringLen($between[0]))
$anweisungen = StringSplit($aTest[$i], ' ')
For $h = 1 To $anweisungen[0]
If StringLeft($anweisungen[$h], 1) = 'T' Then
$zahl = StringRight($anweisungen[$h], StringLen($anweisungen[$h]) - 1)
_ArrayAdd($ergebnis, $anweisungen[$h] & ' (' & $between[0] & ' )')
$ergebnis[0] = UBound($ergebnis) - 1
EndIf
Next
EndIf
Next
ConsoleWrite("Schnitzel :" & $time3 & @CRLF)
So habe mein Pattern auch angepasst und mal einen Speedtest durchgeführt.
Es zeigt sich, dass RegExp nicht wirklich schnell ist.
Gewonnen hat bei mir mit hauchdünnem Vorsprung die Lösung von Bugfix.