Du weist der Variable $11 Daten zu bevor du diese erstellt hast. Deklariere diese einfach am Beginn mit: Local $11, dann sollte dein Problem behoben sein.
Aber mit Einzelvariablen wirst du bald die Übersicht verlieren - nimm Arrays.
Beiträge von BugFix
-
-
wie war der befehl um den inhalt zu vergleichen?
Mach ein Kommandofenster auf und verwende "compare". Geht schnell und zuverlässig. -
,will ich von verschiedenen Perpektiven (wie z.B. Gun-Food) TV schauen können.
Dann gibts DrehtellerNun, den Drehteller braucht man da nicht wirklich. Bei meinem Samsung kann ich de facto aus fast 180° Winkel von der Seite schauen, ohne deutlich spürbare Minderung der Bildqualität.
-
Also 46" bei 3,5m Abstand geht.
Aber machs lieber 'ne Nummer kleiner und dann hochwertiger in der Ausstattung. Ich hab den hier (UE 40 D 7090 LSXZG) Samsung-Link, als Multimedia-Zentrale ideal (WLAN, TV-Aufzeichnung auf USB-HD - auch bei TV aus, etc.)Wenn du die Möglichkeit hast - häng ihn auf.
-
Falls ja, wie kann ich das so drehen das die CR als Zeilensprung interpretiert werden?
[autoit]
Ganz einfach:$GesamterText = StringReplace($GesamterText, @CR, @CRLF)
[/autoit] -
Klingt nicht übel.
Zumindest kann man dann mal einer interessierten Gruppe aus dem Arbeitsleben aufzeigen, was alles mit AutoIt im administrativen und produktiven Bereich geht.
Meine Automatisierungen betreffen vorrangig DB-Auswertungen, Fehlersuche/-korrektur in Abrechnungsdaten, etc. Halt alles so kleine Tools, die einem Zeit sparen und langweilige Arbeit abnehmen.
-
Nachtrag:
Hat funktioniert, kann geclosed werden
Nicht closen - setze du bitte im ersten Beitrag das Präfix auf "gelöst". -
Einfachster Weg: Deaktiviere den Button wenn er geklickt wurde und starte dann die Anwendung. Ist die Anwendung beendet aktivierst du ihn wieder.
-
wenn eine Information fehlt soll die aber nicht Leer bleiben!
Du kannst ja alternativ die leeren Felder durch Pseudoeinträge ersetzen, z.B. numerischer Wert mit "9999999" (Länge nach Standardeintragslänge bestimmen) und Zeichenfolge mit "ZZZZZZ".
Einfach das Array durchlaufen und die Leerfelder ersetzen (Abhängigkeit SpaltenIndex - zugeordneter Feldtyp). -
Leg dir ein 2D-Array an. Die Anzahl der Elemente in der 2.ten Dimension legst du fest anhand der maximalen Feldinformationen. Dazu definierst du aber einen eindeutigen Index für diese Info.
Bsp.:CodeIDK+102514072+99+AOK Bramsche' VDT+19970403' FKT+04' VKG+01+102114819+5++++++00' NAM+01+AOK Die Gesundheitskasse+für Niedersachsen' ANS+1+49565+Bramsche+Marktstrasse 5' ANS+2+49551+Bramsche+1151' UNT+000009+00005' UNH+00006+KOTR:01:001:KV'
[autoit]
Nun sind automatisch die Arrayfelder, für die im Datensatz keine Werte waren, leer.
Angenommen dieser Datensatz enthält alle überhaupt möglichen Informationen, dann legst du im Vorfeld dein Array fest:
[ZeilenIndex][0] = IDK
[ZeilenIndex][1] = VDT
[ZeilenIndex][2] = FKT
[ZeilenIndex][3] = VKG
[ZeilenIndex][4] = NAM
[ZeilenIndex][5] = ANS+1
[ZeilenIndex][6] = ANS+2
[ZeilenIndex][7] = UNT
[ZeilenIndex][8] = UNH
Du definierst demnach erstmalig dein Array:Global $arrayOut[1][9]
[/autoit]
[autoit]
Das Feld "IDK" scheint hier der Identifier für einen neuen Datensatz zu sein. Du kannst jetzt einfach Zeile für Zeile der Datei lesen (_FileReadToArray nutzen) und dann in einem Select-Case bearbeiten.
In etwa so:For $i = 1 To $FileArray[0]
[/autoit]
Select
Case StringLeft($FileArray[$i], 3) == 'IDK'
If $arrayOut[Ubound($arrayOut)-1][0] <> '' Then ReDim $arrayOut[Ubound($arrayOut)+1][9] ; neue Zeile im Array erstellen
$arrayOut[Ubound($arrayOut)-1][0] = ; das was du aus der Zeile verwenden möchtest
Case StringLeft($FileArray[$i], 3) == 'VDT'
$arrayOut[Ubound($arrayOut)-1][1] = ; das was du aus der Zeile verwenden möchtest
Case StringLeft($FileArray[$i], 3) == 'FKT'
$arrayOut[Ubound($arrayOut)-1][2] = ; das was du aus der Zeile verwenden möchtest
Case StringLeft($FileArray[$i], 3) == 'VKG'
$arrayOut[Ubound($arrayOut)-1][3] = ; das was du aus der Zeile verwenden möchtest
Case StringLeft($FileArray[$i], 3) == 'NAM'
$arrayOut[Ubound($arrayOut)-1][4] = ; das was du aus der Zeile verwenden möchtest
Case StringLeft($FileArray[$i], 5) == 'ANS+1'
$arrayOut[Ubound($arrayOut)-1][5] = ; das was du aus der Zeile verwenden möchtest
Case StringLeft($FileArray[$i], 5) == 'ANS+2'
$arrayOut[Ubound($arrayOut)-1][6] = ; das was du aus der Zeile verwenden möchtest
Case StringLeft($FileArray[$i], 3) == 'UNT'
$arrayOut[Ubound($arrayOut)-1][7] = ; das was du aus der Zeile verwenden möchtest
Case StringLeft($FileArray[$i], 3) == 'UNH'
$arrayOut[Ubound($arrayOut)-1][8] = ; das was du aus der Zeile verwenden möchtest
EndSelect
Next
Nun sind automatisch die Arrayspalten, für die in der Datei keine Werte standen, leer. -
Vorab: Hast du hier ein Bsp. wild erfunden, mit dem du üben willst oder ist das etwas Reales? Sollte es real sein, wäre es nicht sehr sinnvoll aufgebaut.
Du hast hier Datensätze der Form "Vorname, Name, Strasse". Nur warum sind sie nicht zusammengehörig? Wenn schon keine Datenbank verwendet wird (was sich eigentlich bei solchen Daten anbietet), sollten Daten immer logisch zusammengehörig gespeichert werden.
Also in Textdateien jede Zeile ein Datensatz mit z.B. per Semikolon oder Komma getrennten Einträgen. Kannst du dann auch super in Arrays einlesen und durchforsten.
Das betrifft jetzt zwar nicht deine Regex-Frage - aber wenn dein Problem keine Übung ist, solltest du eine andere Herangehensweise bevorzugen. -
Hättest du das mal von Anfang an gesagt.

- Kombination von Ctrl-ID und Event $EN_CHANGE abfragen
- mit RegEx den Inhalt des Ctrl prüfen
- wenn Übereinstimmung mit Muster (2 Nachkommastellen ? ) - erst dann senden -
Nach wie vor: Ich weiß nicht, WAS genau du haben willst. Schreib doch mal Step-by-Step als Pseudocode, was passieren soll.
-
Ich möchte aber Adlibregister eigentlich nicht deaktivieren.
Wenn mit den Funktionen kontinuierlich Einträge gemacht werden sollen, kannst du ja diese Werte auch puffern, während du händische Eingaben machst. Habs grad nicht getestet - aber ich vermute du würdest den Fokus verlieren, wenn während deiner Eingabe per Adlibfunktion ein Eintrag automatisch erfolgt. -
Ich bin mir nicht ganz sicher, was du vorhast. Aber du solltest WM_COMMAND auswerten. Wenn ein Ctrl den Fokus bekommt wird $EN_SETFOCUS ausgelöst. Ist es das Ctrl, das du per Hand bearbeiten möchtest, solltest du für die Dauer der Bearbeitung AdlibRegister deaktivieren und nach $EN_KILLFOCUS für dieses Ctrl wieder aktivieren.
-
Ausserdem hab ich in dem Clienten nicht gefunden wo er und wie er die sachen ausliest
Das wundert mich sehr. Denn exakt deine Frage wurde in Post 2 dieses Threads auch gestellt und mit dem entsprechenden Code-Bsp. von mir in Post 3 beantwortet. -
Mh ok dann muss ich schauen ob ich da selbst reinbauen kann, weil die Spalzenanzahl zumindestens bei mir nicht fest ist :).
[autoit]
In der Funktion _GUICtrlListView_Formatting_Startup wird die Größe von $aIParam unter anderem anhand der größten verwendeten Spaltenzahl (bei mehreren Listview) definiert.Global $aIParam[1][$maxColumn+1][5] ; [n][0][0]=ItemStruct, [n][1..Count][0..4]=SubItemValue
[/autoit]Hier kannst du aber durchaus auch vorab z.B. das mögliche Maximum festlegen (also z.B. 32 ). Dann sollte dein Problem gelöst sein. Aber beachten: Immer 1 größer als die max. Anzahl an Spalten!
-
Jetzt habe ich doch noch ein Problem. Wenn ich ein Subitem, welches mit _GUICtrlListView_AddSubItem hinzugefügt wurde, umfärben will kommt immer der Fehler:
Das ist auch völlig korrekt. Beim StartUp ( _GUICtrlListView_Formatting_Startup($hGUI, $hListView) ) wird die Spaltenzahl des/der verwendeten Listview ausgelesen und anhand dieser Werte das Array $aIParam erstellt. Wenn du später eine Spalte hinzufügst, ist dafür im Array kein Platz reserviert und der Fehler tritt auf.
Ich möchte auch ungern diesen Schritt variabel gestalten, da eine ständige zusätzliche Überprüfung auf neue Spalten in allen betroffenen Funktionen auch einen erheblichen (zeitlichen) Mehraufwand im Programmablauf darstellt.
Ich denke mal, es ist auch keine allzu große Hürde beim Programmieren, die Spaltenzahl zuerst festzulegen.
-
Bei Registryeinträgen ist Windows nunmal zickig.
Aber wenn du in den Schlüssel "HKEY_CURRENT_USER" schreibst, brauchst du nicht kpl. neustarten. Hier reicht Abmelden/Anmelden zum Aktivieren der Änderungen. Geht etwas schneller als Neustart.
Eventuell reicht es ja auch die explorer.exe neu zu starten - schon probiert? -
Liegt es an XP?
Nun dadran nicht. Vermutlich hast du das erforderliche NET Framework nicht installiert. Bin mir nicht ganz sicher - sollte im 2.0 enthalten sein. Aber es ist generell sinnvoll, alle Versionen zu installieren, da immer mehr Software das voraussetzt.
Mit folgendem Skript kannst du prüfen ob das Objekt vorhanden ist.
[autoit]$oArrayList = ObjCreate("System.Collections.ArrayList")
[/autoit]
If Not IsObj($oArrayList) Then ConsoleWrite( 'Das Objekt "System.Collections.ArrayList" ist auf dem PC nicht enthalten' & @CRLF )