Beiträge von ugt100
-
-
-
Hallo zusammen,
mal wieder eine Frage an das Forum hier, mit der Hoffnung auf einen Tip bzw. RatIch habe eine Datei, die mit lauter E-Mail artigen Namen zur Weiterverarbeitung genutzt werden soll (s. Bsp). Damit die lieben Userlein sich das schön anschauen können und ggf. Änderungen vorschlagen können, wäre eine Darstellung mittels ListView aus meiner Sicht gut.
Das Problem ist jetzt, wenn ich diese Datensätze mittels GUICtrlCreateListView und IniReadSection in eine entsprechende GUI packen will, wird das erste '=' zum Trennen
der Spalten (Columns) genommen.
Frage: Kann ich darauf Einfluss nehmen und mittels, ich nenne es mal MASKIERUNG, das letzte '=' als Trennung bestimmen, sodass als Ergebnis sich Folgendes ergibt ?Col1 (Nummer) | Col2 (Name) | Col3 (ID)
1 |CN=Phlipp Roesler/OU=FDP/OU=MdB/O=BRD | 123Ausgangsdatei:
[test]
CN=Phlipp Roesler/OU=FDP/OU=MdB/O=BRD = 123
CN=Guido Westerwelle Pazic/OU=FDP/OU=MdB/O=BRD = 456
CN=Horst Seehofer/OU=CSU/OU=MdB/O=BRD = 789
CN=Angela Merkel/OU=CDU/OU=MdB/O=BRD = 101
CN=Peer Steinbrueck/OU=SPD/OU=MdB/O=BRD = 112
CN=Frank-Walther Steinmeier/OU=SPD/OU=MdB/O=BRD = 131
CN=Christina Schroeder/OU=CDU/OU=MdB/O=BRD = 415
CN=Claudia Roth/OU=Gruene90/OU=MdB/O=BRD = 161
CN=Cem Oezdemir/OU=Gruene90/OU=MdB/O=BRD = 718P.S.
Die GUI Erstellung bzw. ListView Erstellung ist nicht das Problem - das funktioniert schon.
Wobei meine Befürchtung ist, dass das Trennzeichen rel. fix sein dürfteDanke
mfg
ugt100 -
Hallo zusammen, hallo Raupi (Du als Ersteller der Funktion)
Ich wollte die o.g. Erweiterung bei mir hinzufügen und habe alles so gemacht, wie es in der Anleitung beschrieben ist.
Doch es tut sich nichts.Anmerkungen:
a) ich nutze die 'portable' Version vom AutoIT 3.3.8.1 unter Win8 (64)
b) die Datei SciTEUser.properties gab es bei mir nicht (weder in UserVerzeichnis noch sonst wo)
c) die Datei konnte innerhalb von Scite mittels --> Options - Open User Option File im UserVerzeichnis erstellt werden (allerdings ist diese dann erst mal 'blank')
d) in die Datei habe ich dann Deinen Aufruf mit #1 kopiert# 1 Insert AutoIt3 Function Header as per UDF guidlines
command.name.1.*.au3=InsertFunctionHeader
command.subsystem.1.*au3=3
command.1.*.au3=InsertFunctionHeader
command.save.before.1.*.au3=2
command.shortcut.1.*.au3=Ctrl+Shift+Alt+Ce) Scite schliessen und neu öffnen - bringt leider nicht den erwünschten Erfolg

Vielleicht hast Du ja jemand eine Idee.Danke auf jedenfall schon einmal im voraus.
LG
ugt100
(auch aus FFM !) -
Guten Morgen zusammen,
Erst einmal grundsätzlich Danke für die Antworten.
[autoit]
Nach einmal drüber schlafen habe ich es jetzt hinbekommen und sehe nun die aktuell hochlaufende Zeit pro Suchzyklus.
Die eigentliche Lösung meines Problems lag darin, die Variable cde_begin (Starten des Timers) mittels cde_begin="" immer wieder zurückzusetzen.
[/autoit][autoit][/autoit][autoit]
...
$cde_begin = "" ; reset variable to 'NULL' - don't forget
$cde_begin = TimerInit() ; measuring search duration time -start-
$cdeUhr = _GUICtrlStatusBar_SetText($cdeStatus, "00:00:00",3)
AdlibRegister("_Timer", 1000);----> hier läuft das eigentliche Script für den Dir/File Compare
[/autoit][autoit][/autoit][autoit]AdlibUnRegister("_Timer")
[/autoit][autoit][/autoit][autoit];das ist die TimerFunc
[/autoit]
Func _Timer()
If Not @error Then
$cdeTime = _TicksToTime(Int(TimerDiff($cde_begin)), $Hour, $Mins, $Secs)
$cdeTimeNew = $cdeTime
$cdeTime = StringFormat("%02i:%02i:%02i", $Hour, $Mins, $Secs)
If $cdeTimeNew <> $cdeTime Then _GUICtrlStatusBar_SetText($cdeStatus, $cdeTime,3)
EndIf
EndFunc ;==>Timer()
Da das ganze Script ziemlich lang (und aufwendig - zumindest aus meine Sicht) ist, wollte ich nur die Teile die im Zusammenhang mit dem Timer stehen in den Thread bringen.
Aber wenn es jemanden interessiert - also das ganze Script als solches - stelle ich es natürlich zur Verfügung
Grundsätzlich tut es das was es 'für meine Zwecke' tun soll - nämlich den Kollegen die Möglichkeit zu geben einen Dir bzw. File Compare zu machen,
wobei die zu vergleichenden Laufwerke/Dirs bequem auswählbar sind. Als Ergebnis ergibt sich eine Übersicht der Differenzen und - wenn gewünscht - sind auch die 'Dir-Listen'
verfügbar. Alle anderen Dinge (Timer, Logo, Animation etc..) sind meinem Spieltrieb geschuldet + letztlich 'nice to have'.
Inwieweit das alles gut und 'sauber' programmiert ist, kann ich nicht beurteilen. Sicher wird es aus Sicht der Profis erhebliches Verbesserungspotential geben, aber als 'Newbie' stehe ich dazu.Raupi
Ich hoffe das erklärt mein Anliegen + die nicht SnipsBugFix
Ich glaube da habe ich mich wohl etwas missverständlich ausgedrückt. Eigentlich will/wollte ich nicht die aktuelle Uhrzeit einblenden, sondern die Laufzeit des aktuellen Suchzykluses.Nochmals vielen Dank und wie gesagt wenn Interesse besteht am Script - einfach Bescheid geben
mfg
ugt100 -
Hallo zusammen,
irgendwie drehe ich mich im Kreis und komme nicht so recht weiter mit meinem Problem (sofern es überhaupt eines ist)
Ich versuche in einer Statusbar einen (hochzählenden) Timer zum Laufen zu bringen.
Dieser soll einfach die Laufzeit des Scripts (ich nutze das Script um einen (Datei/Dir)Vergleich zu machen) hochzählen.
Mittels der _TicksToTime Funktion und AdlibRegister wollte/will ich das umsetzen.Leider passiert aber nichts, es wird nicht hochgezählt - warum ?
[autoit]
Wahrscheinlich ist es eine Kleinigkeit, aber ich jedenfalls sehe diese nicht.
Weiss jemand vielleicht Rat?
Ich habe mal die entsprechenden Stellen des Scripts beigefügt
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]
Local $cdeParts[5] = [9, 130, 180, 240, 10] ;StatusBar (-parts & Splitting)
$cdeStatus = _GUICtrlStatusBar_Create($cde_Form1) ;Statusbar
_GUICtrlStatusBar_SetMinHeight($cdeStatus, 20)
_GUICtrlStatusBar_SetParts ($cdeStatus, $cdeParts)
cdeCR = _GUICtrlStatusBar_SetText($cdeStatus, " - cde 2013-",4)
...
Local $cde_begin = TimerInit() ;measuring search duration time -start-
$cdeUhr = _GUICtrlStatusBar_SetText($cdeStatus, "00:00:00",2)
AdlibRegister("Timer", 1000)
...Func Timer()
[/autoit]
_TicksToTime(Int(TimerDiff($cde_begin)), $Hour, $Mins, $Secs)
Local $sTime = $Time ;Letzten Timerstand merken, um den Vergleich zu ermöglichen und Flackern zu vermeiden..
$Time = StringFormat("%02i:%02i:%02i", $Hour, $Mins, $Secs)
If $sTime <> $Time Then _GUICtrlStatusBar_SetText($cdeStatus, $cdeUhr, 2)
EndFunc ;==>TimerDanke schon einmal im voraus
mfg
ugt100 -
Nochmal ein hallo,
erstens ein generelles Feedback:
ich habe die angebotenenen Lösung durch gespielt und festgestellt, dass letztlich alle funktionieren (viele Wege führen nach Rom - oder so).
Soweit sogut.Alerdings habe ich auch feststellen müssen, dass mein 'QuellFile' - wie auch immer - einen CRLF (glaube ich zumindest) als letztes Zeichen des Textfiles mitbringt.
D.h. z.B. bei 23 Accounts die geliefert werden, sind es letztlich nicht 23 Datensätze=Zeilen sondern 23 +1.
OK - im Prinzip nicht schlimm kann ich mittels $cdeLine = StringTrimLeft($cdeLine, $cdeTrim-1) abfangen.Vllt. ist es aber auch eine Idee das Quellfile nochmal zu überarbeiten, bevor es weiter prozessiert wird in ein xlm file.
Wobei ich noch nicht so genau weiss was da sinnvoll ist ... @CRLF ist es sicherlich nicht.
Nun gut ich werde sehen.Danke an alle -> Alcros, UEZ, Make-Grafik
- 
Gruss
ugt100 -
Hallo zusammen,
so nun mit etwas Ruhe, kann ich vermelden, dass das ich im 1. Schritt das Script von Alcros nun zum Laufen gebracht habe.
Warum ist mir noch nicht so ganz klar, aber da das $aSplit eine ungrade Anzahl Elemente listet, erklärt sich der Fehler im Nachgang (w/ DIV/2 ...).
Mittels _ArrayPop($aSplit) klappt es dann !Anm.: Im QuellFile sehe ich nichts Fehlerhaftes - aber erstmal zweitrangig.
[autoit][/autoit][autoit][/autoit][autoit]#include <Array.au3>
[/autoit][autoit][/autoit][autoit]Global $sFile = FileRead("z3.txt") ; Datei einlesen
[/autoit][autoit][/autoit][autoit]
$sFile = StringReplace($sFile,@CRLF,@LF) ; Alle Zeilenumbrüche in @LF ändern
$sFile = StringReplace($sFile,@CR,@LF) ; Alle Zeilenumbrüche in @LF ändern
Global $aSplit = StringSplit($sFile,@LF&",") ; Bei Komma und Zeilenumbruch splittenArrayPop($aSplit); <----------------------- That's the clue
[/autoit][autoit][/autoit][autoit]Global $aNamen[$aSplit[0]/2+1][2] ; Array erstellen
[/autoit]
$aNamen[0][0] = UBound($aNamen)-1 ; Anzahl in Array schreiben
Global $i
FOr $i=1 To UBound($aSplit)-1 Step 2 ; Werte in Array schreiben
$aNamen[($i+1)/2][0] = $aSplit[$i]
$aNamen[($i+1)/2][1] = $aSplit[$i+1]
Next
_ArrayDisplay($aNamen)Nochmals vielen DANK an alle.
Ich werde - wenn ich Zeit habe - die anderen Wege mir auch anschauen und ggf. im Forum entsprechende Infos/Antworten schreiben bzw. posten.mfg
ugt100
-
Hallo
erst einmal ein DANKE an alle di so schnell und kompettent geantwortet haben.
Ich habe das ganze zwar noch nicht so ganz verdaut, denke aber das ich es verstehe.Desweiteren ist mir aufgefallen, dass ich offensichtlich eine Tatbestand meines TextFiles unterschätzt habe, der wohl doch zu Problemen führt.
Ich hatte der Übersicht wegen das Textfile etwas gekürzt.In natura sieht das so aus (Canonischer Namen) + verursacht m.E. die Probleme:
CN=Angela Merkel/OU=CDU/OU=Bundestag/O=BRD, AR12345
CN=Guido Westerwelle/OU=FDP/OU=Bundestag/O=BRD, GR84029
CN=Phillip Roesler/OU=FDP/OU=Bundestag/O=BRD, PR75375Kann das sein ?
Asche auf mein Haupt - das war ziemlich ungeschickt -

DANKE
mf
ugt100 -
Hi Alcros,
puh - das ist ja nicht ganz so trivial.
Zu Meinem Verständnis, was da passiert:
Zeilen 3 - 6 ---- da werden alle möglichen Zeichen ersetzt um einen einheitliche Darstellung zu erhalten und in ein Array eingelesen - soweit OK, verstanden
Zeile 8 ---- Aufbau des 2d Arrays: da in $aSplit in Summe immer ungerade Anzahl an Elementen vorliegen muss -> $aSplit[0]/2+1 = gerade Anzahl(Paare) + [2]- soweit OK, verstanden
Zeile 9 ---- Anzahl der 'Paare' ins Array schreiben- soweit OK, verstanden
Zeile 11 ---- Schleife zum Auslesen des $aSplit --> Anzahl / immer im 2er Schritt
Zeile 12 ---- Ins 2d Array schreiben: 1. Element Row1/Col1 (1+1)/2 = 1 also an Pos [1] + [0] = $aSplit[1], weil i=1
Zeile 13 ----- Ins 2d Array schreiben: 1. Element Row1/Col2 (1+1)/2 = 1 also an Pos [1] + [1] = $aSplit[2], weil i=i+1=2
Zeile 15 ------ Array anzeigen - soweit OK, verstandenLiege ich richtig ?
Beim test erhalte ich leider den Fehler (den ich nicht erkenne) - ich habe eine Testfile mit 8 Elementen genutzt.
Array variable has incorrect number of subscripts or subscript dimension range exceeded.:Danke auf alle Fälle
Gruss
ugt100 -
Hallo zusammen,
ich stehe im Augenblick etwas auf dem Schlauch und komme nicht so recht weiter.
Daher erhoffe ich mir hier einen Tip o.ä.Im Zuge einer Auswertung eines grossen Textfiles komme ich an eine Stelle in der ich gerne ein Textfile in ein Array einlesen muss (wie das funktioniert weiss ich)
Die ieinzulesende Datei hat nach mehreren 'grep' Aktionen folgendes Format (stark vereinfacht)Angela Merkel, AR12345
Guido Westerwelle, GR84029
Phillip Roesler, PR75375
....Jetzt kann ich diese natürlich mittels _FileReadToArray einlesen was zu u.a. Ergebnis führt:
[0]|3
[1]|Angela Merkel, AR12345
[2]|Guido Westerwelle, GR84029
[3]|Phillip Roesler, PR75375
....ich hätte es aber viel lieber bzw. um den weiteren Fortgang rel. einfach umsetzen zu können, wäre folgende Form die Lösung meines Problems.
(denn dann könnte ich auf die jeweiligen Elemente des Arrays direkt zugreifen und müsste nicht Nachgang das Ganze wieder auseinander'schneiden')[0][0]|3
[1][0]|Angela Merkel
[1][1]|AR12345[2][0]|Guido Westerwelle
[2][1]|GR84029[3][0]|Phillip Roesler
[3][1]|PR75375und da klemmst es jetzt bei mir

Danke schon mal im voraus
mfg
ugt100 -
stimmt - da war ein Fehler in der Zuordnung ... blöde
Aber Dank Deiner Erklärung habe ich / bin ich dem 'Schwarzen Loch' REGEX wieder ein Stück näher.
Das bleibt jedenfakks spannend - wird mich echt beschäftigen.Allen nochmals DANKE
@James1337
auch Dir explizit - Danke - für den Lösungsvorschlag (auch eine gute Version)
Ich muss mit dem REGEX Thema intensiver beschäftigen, das echt grosses Potentialmfg
ugt100 -
Super Danke an Name22 und UEZ für die schnellen Antworten
Beide 'Versionen' funktionieren.Zu meinem Verständnis, sehe ich das richtig
Variante UEZ:
StringRegExpReplace($cdeArray[$i], "(\d{4}-\d{2}-\d{2}) ((?:\d{2}:){2}\d{2})", "\1" & @TAB & "\2")
zu prüfender String steht in der Variablen $cdeArray[i]'pattern' - Teil 1: 4 Ziffern-2 Ziffern-2 Ziffern
'pattern' - Teil 2: nachfolgend 2 Ziffern:2 Ziffern:2 ZiffernReplace - zw. Teil1 und Teil2 setze das Zeichen = TAB
Variante name22
StringRegExpReplace($sLog, "(?m)(\d+\-\d+\-\d+)(\h)(\d+\:\d+\:\d+.*)", "\1" & @TAB & "\3")
warum am Ende die \3 ???Gruss und nochmals Danke
mfg ugt100
-
Hallo zusammen,
ich hätte da eine Bitte und zwar
benötige ich für ein Script, welches eine 'Aufarbeitung' eines rel. grossen LogFiles durchführt einen RegEx Ausdruck (denke ich zumindest).
Es soll in dem Textfile in dem zeilenweise Einträge geschrieben wurden - siehe Bsp. - genau das eine Leerzeichen zwischen dem Datum und der Uhrzeit
durch ein TAB ersetzt werden. Ich denke da an so etwas wieErsetze das Leerzeichen, welches zwischen einer Gruppe von 10 Zeichen (im Format dddd-dd-dd) vor und einer zweiten Zeichengruppe von 8 Zeichen (im Format dd:dd:dd) danach steht
2013-04-05 16:12:04 : Aufz. Start Mustermann AG
vorher: 10 Zeichen vor - LEERZEICHEN - 8 Zeichen nach
nachher: 10 Zeichen vor - TABULATOR- 8 Zeichen nachLeider bekomme ich den Ausdruck nicht hin
- Wahrscheinlich ist das für einen REGEX Mächtigen ein ganz einfaches DingDANKE
mfg
ugt100 -
Hi James,
ich habe das auch nicht als 'Böse' empfunden ... aber ein bischen 'Spass' muss auch sein - oder ?
Gruss
ugt100 -
Hallo James,
wie versprochen hier mein Feedback.
Nachdem ich Deinen Hinweis registriert und auch verstanden hatte, war das ganze ziemlich schnell gelöst.
Im Prinzip habe ich folgendes gemacht:Spoiler anzeigen
[autoit]
[/autoit]
;Main (wegen Mehrfachstartabfrage)
If (_Singleton("xyz.exe", 1) = 0) Then
$MsgBox = MsgBox(36, "Das Programm läuft bereits", "Eine Instanz der xyz.exe läuft bereits!" & @CRLF & "Wollen Sie tatsächlich eine weitere Instanz starten ?")
If ($MsgBox = 6) Then
MsgBox(64, "Neue Instanz", "Die Anwendung wurde nochmals gestartet. Ein weiteres SystemTray Icon ist vorhanden")
_cdeXYZ()
EndIf
EndIf
_cdeXYZ()Der Kniff bestand also darin mein eigentliches Script einfach als Func zu handeln ...
(was ich jetzt allerdings nicht weiss, ob das 'sauber' programmiert ist ?)Nochmals Danke -

mfg
ugt100P.S. man beachte den Spoiler & Co

-
Hi James1337,
da kannst Du mal sehen, ich habe vor lauter Bäumen den Wald nicht gesehen bzw. habe Deinen Kniff irgendwie total missverstanden.
Wenn ich das jetzt richtig verstanden habe, wird sich das so machen lassen.Ich teste das (wahrscheinlich schon gleich morgen) und gebe DIR auf jedenfall ein Feedback.
Supi - Danke
mfg
ugt100
-
Hallo James1337,
sorry - das mit dem Post - da habe ich zu schnell geklickert und nicht geprüft (normalerweise mache ich das schon richtig)
So nun zu meinem Dilemma.
Gibt es ggf. irgendeinen anderen Weg den Du Dir vorstellen kannst.
Sinn und Zweck der Übung ist es dem lieben Userlein es zu ermöglichen eine x-te Instanz (wobei x > 1) zu starten,
wobei allerdings eine 'Warnung' aufpoppt. Nach dessen Erscheinen soll er halt selbst ja oder nein sagen.
Wenn NEIN - schliessen der akt. Instanz
Wenn JA - ausführen der Instanz ohne erneute 'Prüfung/PopUpDanke schon mal
mfg
ugt100 -
Hallo zusammen,
in meiner 'Not' wende ich mich mal wieder hier an das Forum.
(anmerken möchte ich, dass ich sowohl hier im Forum als auch allgemein dem Problem schon geraume Zeit nachgehe und leider zu keiner Lösung komme, vllt. ja auch zu dumm)Problem:
Ein als .exe kompiliertes AutoIT Script wird im zum erstenmal gestartet (das Prog ist eine Art Log - ist aber letztlich egal) und nistet sich ausschliesslich als TrayIcon in den SystemTray (die möglichen Aktionen innerhalb des Programms werden dort über ein Tray Menue durchgeführt - also nix Active and/or Existing Window)Nun gibt es die seltene Situation das diesselbe .exe nochmal gestartet werden soll/muss. Um versehentliches Starten zu verhindern bzw. zumindest auf den Umstand hinzuweisen, würde ich dies gerne dem Anwender mitteilen. Nach dem Motto: Die Anwendung läuft schon, willst du wirklich diese nochmals starten.
Und genau hier komme ich nicht so recht weiter:
Im aufgeführten Snip ist alles schön, bis auf die Tatsache, das die Prüfung (natürlich) beim Starten der 2. Instanz wieder durchlaufen wird und 'fragt',
was nach dem Bestätigen des erneuten Startens unschön ist.Irgendwie drehe ich mich da im Kreis - weiss jemand Rat oder hätte einen Tip ???
Spoiler anzeigen
If _Singleton("cdeZeiterfassung.exe", 1) = 0 Then
$cdeInstance = MsgBox(36,"Das Programm läuft bereits", "Eine Instanz der EXE läuft bereits!" & @CRLF & "Wollen Sie tatsächlich eine weitere Instanz starten ?")
If $cdeInstance = 6 Then
ShellExecute(@ScriptDir & "\xyz.exe")
MsgBox(64,"Neue Instanz", "Die Anwendung wurde nochmals gestartet")
Else
MsgBox(64,"Neue Instanz", "Die Anwendung wurde NICHT nochmals gestartet")
Exit
EndIf
Else
MsgBox(64,"Neue Instanz", "SingleStart")
EndIfDanke schon einmal hier an das SUPER FORUM
mfg
ugt100 -
Hallo zusammen.
es ist wie immer einfach gut hier im Forum. Es gibt immer wieder schnelle Hilfe.Ein Dank in diesem Fall an PainTain und Autobert

Da das Ganze mir keine Ruhe gelassen hat, habe ich eine kleine Nachtschicht eingelegt und die Kuh vom Eis bekommen.
Letztlich ähnelt meine Lösung der Vorgehensweise von Autobert (das mit iniread usw. habe ich nicht genutzt)Wenn es von Interesse sein sollte, kann ich ja das Script posten - einfach Bescheid geben (ist aber eigentlich nichts so Bewegendes - letztlich)
Also nochmals DANKE
mfg
ugt100