Gib mir mal ein paar Zeilen csv mit Kriterien der Zuordnung - dann mach ich ein Bsp.
Beiträge von BugFix
-
-
Also du willst die csv zerpflücken und in verschiedene Tabellenblätter die Daten einfügen.
Das kannst du mit der Excel-UDF tun. Schau dir mal die Befehle an - da findest du, was du brauchst.
Deine Kriterien zum Aufteilen der Daten mußt du dann nur noch in ein Programm pressen.
-
Eine CSV ist doch defacto schon eine Exceldatei - brauchst sie in Excel nur importieren.
-
3 Threads zu einem Thema ist auch Spam!

[Threads zusammengefaßt]
Und nun bitte Ende der Diskussion - das ist das Skript-Forum. ==> [Thread Closed]
-
Hi,
ich möchte meine automatisierte Variablendeklaration ausbauen und auch auf die Möglichkeit von Variablen inerhalb einer Arraydeklaration reagieren.
Mögliche Strings z.B.:
Local $IrgendwasVor, $Array[3] = ["{UP}",$bla_1 , $_blub]
Local $IrgendwasVor, $AccelKeys[5][2] = [["{UP}", $1Up], ["{DOWN}", $1Down], ['{TAB}', $1Tab], ['+{TAB}', $1STab], ['{Enter}', $1Enter]], $IrgendwasNachDa in den Strings einfache und doppelte Anführungszeichen vorkommen können und zum Test der String in Anführungszeichen eingefaßt wird, habe ich die inneren " durch Chr(0x22) ersetzt.
Mein Ziel ist, die enthaltenen Variablen zu selektieren (blau markiert).
[autoit]
Mit nachfolgendem Skript klappt das auch. Ich würde jedoch gern in einem Schritt die Variablen ausgeben.
Also, vielleicht hat ja jemand eine Idee, wie man das Pattern verbessern könnte. Die Vermeidung von Backreferenzen (?:) ist übrigens beabsichtigt.Local $pattern = "(?:\$[\d\w]+\[\d+\](?:\[\d+\])?\s*=\s*)" & _
[/autoit][autoit][/autoit][autoit]
"(\[(?:(?:\s*(?:\x22|')[^\x22']+(?:\x22|')\s*?,?)*|(?:\s*(?:\$[\d\w]+)\s*),?)*\]|" & _
"\[(?:\[(?:(?:\s*(?:\x22|')[^\x22']+(?:\x22|')\s*?,?)*|\s*\$[\d\w]+\s*,?)*\][\s,]*)*\])"Local $test1D = "Local $IrgendwasVor, $Array[3] = [" & Chr(0x22) & "{UP}" & Chr(0x22) & ",$bla_1 , $_blub]"
[/autoit][autoit][/autoit][autoit]Local $test2D = "Local $IrgendwasVor, $AccelKeys[5][2] = [[" & Chr(0x22) & "{UP}" & Chr(0x22) & _
[/autoit][autoit][/autoit][autoit]
", $1Up], [" & Chr(0x22) & "{DOWN}" & Chr(0x22) & ", $1Down], ['{TAB}', $1Tab]" & _
", ['+{TAB}', $1STab], ['{Enter}', $1Enter]], $IrgendwasNach"; check ob Array-Deklaration enthalten
[/autoit][autoit][/autoit][autoit]
Local $ret = StringRegExp($test1D, $pattern, 1), $sOut = ''; wenn ja, im Array enthaltene Variablen selektieren
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
If IsArray($ret) Then
ConsoleWrite($ret[0] & @CRLF) ; Arrayinhalt ausgeben
$ret = StringRegExp($ret[0], '\$[\d\w]+', 3)
If IsArray($ret) Then
For $i = 0 To UBound($ret) -1
$sOut &= $ret[$i] & ', '
Next
ConsoleWrite(StringTrimRight($sOut, 2) & @CRLF & @CRLF)
EndIf
EndIfLocal $ret = StringRegExp($test2D, $pattern, 1)
[/autoit][autoit][/autoit][autoit]; wenn ja, im Array enthaltene Variablen selektieren
[/autoit]
If IsArray($ret) Then
$sOut = ''
ConsoleWrite($ret[0] & @CRLF) ; Arrayinhalt ausgeben
$ret = StringRegExp($ret[0], '\$[\d\w]+', 3)
If IsArray($ret) Then
For $i = 0 To UBound($ret) -1
$sOut &= $ret[$i] & ', '
Next
ConsoleWrite(StringTrimRight($sOut, 2) & @CRLF)
EndIf
EndIf -
Der Ordner ist schreibgechützt und versteckt. Das mußt du beachten.
-
Speicherort der Cookis (sofern vom User nicht geändert): ..\Dokumente und Einstellungen\USER\Lokale Einstellungen\Temporary Internet Files
-
Dann so:
[autoit]Local $tagPOINTAPI = DllStructCreate('long x;long y')
[/autoit][autoit][/autoit][autoit]
DllCall('user32.dll', 'long', 'GetCursorPos', 'ptr', DllStructGetPtr($tagPOINTAPI))
Local $xPoint = DllStructGetData($tagPOINTAPI, 'x')
Local $yPoint = DllStructGetData($tagPOINTAPI, 'y')
Local $hWnd_under_Mouse = WindowFromPoint($xPoint, $yPoint)
If $hWnd_under_Mouse Then MsgBox(0, '', 'Handle = ' & $hWnd_under_Mouse)Func WindowFromPoint($xPoint, $yPoint)
[/autoit]
Local $ret = DllCall("user32", 'long', 'WindowFromPoint', 'long', $xPoint, 'long', $yPoint)
If Not @error Then
Return $ret[0]
Else
Return 0
EndIf
EndFunc -
So was in der Art hatte ich mal gemacht: eigene Lautstärkeregelung einblendbar
-
Probier mal:
[autoit]Func GetForegroundWindow()
[/autoit]
Local $ret = DllCall("user32.dll", "long", "GetForegroundWindow")
If Not @error Then
Return $ret[0]
Else
Return 0
EndIf
EndFuncZitatThe GetForegroundWindow function returns the handle of the foreground window (the window with which the user is currently working). The system assigns a slightly higher priority to the thread that creates the foreground window than it does to other threads.
-
@ mazo09
Was soll diese Kinderkacke hier?!
Du gibst ein freies Installationstool als dein eigenes Werk aus und versuchst dann noch User, die den Link auf das Tool veröffentlichen, zu Nötigen. Das ist allerunterste Schublade und wenig vereinbar mit dem Geist, der in unserem Forum herrschen soll.
Ich fordere dich hiermit öffentlich auf, dazu Stellung zu nehmen. -
Ich würde sogar sagen, niemand weiß, was das ist.
Wenn du googelst findest du Einträge zu Voicerecorder, Computerspiele, HeavyMetal-Band... -
[autoit]
#include <file.au3>
[/autoit]
Local $aFile, $file = @ScriptDir & '\test_x.txt' ; deine members.txt
_FileReadToArray($file, $aFile)
For $i = 1 To UBound($aFile) -1
;~ ConsoleWrite(StringRegExpReplace($aFile[$i], '(CN=)([a-zA-ZäöüÄÖÜß0-9_\-.]+)(\\,\s*)([a-zA-ZäöüÄÖÜß0-9_\-.]+)(.*)', '$2, $4') & @CRLF)
GUICtrlCreateListViewItem(StringRegExpReplace($aFile[$i], '(CN=)([a-zA-ZäöüÄÖÜß0-9_\-.]+)(\\,\s*)([a-zA-ZäöüÄÖÜß0-9_\-.]+)(.*)', '$2, $4'), $hListView)
Next -
habe ich jetzt nicht genau verstanden ?
Du möchtest bitte mehrere Zeilen aus deiner members.txt posten, sonst kann das Pattern nicht angepaßt werden. -
dass Sonderzeichen im Namen öäü bei \w nicht rekannt werden.
Stimmt, gibt ja die tollsten Usernamen
Dann also "\w+" ersetzen durch "[a-zA-ZäöüÄÖÜß0-9_\-.]+" - dann findest auch den User: Häß-ling_0.5
-
Kommt davon, wenn man den Code nicht sauber einrückt.

Dir fehlt ein EndIf! -
[autoit]
$text = "CN=nachname\, vorname (xx,OU=xx"
[/autoit]
$aUser = StringRegExp($text, '(?:CN=)(\w+)(?:\\,\s*)(\w+)', 1)
MsgBox(0, '', 'Vorname = ' & $aUser[1] & @LF & 'Nachname = ' & $aUser[0])Edit:
[autoit]
Oder ohne Array$text = "CN=nachname\, vorname (xx,OU=xx"
[/autoit]
MsgBox(0, '', 'Nachname,Vorname = ' & StringRegExpReplace($text, '(CN=)(\w+)(\\)(,)(\s*)(\w+)(.*)', '$2$4$6')) -
Müsstest also den String nach Sonderzeichen durchsuchen und dann entsprechend ersetzen.
[autoit]
Und das kannst du ganz komfortabel mit einem RegEx machen:Local $input = InputBox('Test', 'Sonderzeichen')
[/autoit]
$input = StringRegExpReplace($input, '[#!^+{}]', '{' & '$0' & '}')
MsgBox(0, 'String für "Send()"', $input) -
In der Commandline Variante gibt es eigentlich nur zwei Fehlerquellen:
- Regitryänderung wird nicht übernommen (am Besten Rückgabe von Regwrite auswerten) oder
- fehlerhafte Angabe in RunWait:
RunWait(@ComSpec & " /c " & 'C:\Programme\PDFCreator\PDFCreator.exe /NOSTART /PF"' & $SourceFolder & $aFiles[$i] & '"', "", @SW_HIDE)
Next
==> hinter /PF darf kein Leerzeichen stehen!
==> Parameter Dateipfad in eigenen Gänsfüßchen:
'..\PDFCreator.exe /NOSTART /PF"Dateipfad"' -
Ja klar.
[autoit]
Du mußt nur entsprechend eine Variable switchen, z.B. so:Global $Status = 0
[/autoit][autoit][/autoit][autoit]
;...
$button = GuiCtrlCreateButton(..)
;..
While 1
If GuiGetMsg() = $button Then _status()
;...
WEndFunc _status()
[/autoit]
$Status = Not $Status ; wenn $Status=0 wird er 1, bzw. umgekehrt
; Auswerten Statuswert
EndFunc