Text nach bestimmten inhalten durchsuchen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Text nach bestimmten inhalten durchsuchen

04 Jul 2014, 07:11

Hallo zusammen,

Ausgangssituation: Ich habe ein Textfile. Darin stehen lauter Namen, Zahlen und sonstiger kram. Immer getrennt durch ein "," (ohne "") ich benötige aus dem Textfile alle nummern die mit 125, 225 oder 332 anfangen und eine bestimmte länge haben. die längen sind 10, 11 und 10 Zeichen.
Das was ich könnte wäre Zeile für Zeile per Parsen prüfen.
Dann per RegExMatch(Var1, "((125)........)", Var2) und prüfen der Var2 auf Inhalt prüfen.

Ich glaube es gibt einen leichteren weg. Oder?

Für Hilfe bin ich wie immer sehr dankbar!

MfG
fump
just me
Posts: 9423
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Text nach bestimmten inhalten durchsuchen

04 Jul 2014, 07:43

RegExMatch(Haystack, "\D((125|225|332)\d{7,9})\D", OutputVar) oder so ähnlich (ich nehme an, es soll "10, 11 und 12" heißen)?
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Text nach bestimmten inhalten durchsuchen

04 Jul 2014, 08:08

Die längen der Nummern liegen bei der 125 bei 10 Zeichen bei der 225 bei 11 Zeichen und bei der 332 wieder bei nur 10 Zeichen.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Text nach bestimmten inhalten durchsuchen

04 Jul 2014, 15:34

Code: Select all

RegexMatch(In,"\D(125\d{7}|225\d{8}|332\d{7})\D",Out)
http://ahkscript.org/boards/viewtopic.php?f=12&t=3875
Recommends AHK Studio
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Text nach bestimmten inhalten durchsuchen

09 Jul 2014, 09:59

Code: Select all

;============================================================================
; Setzen der Globalen Variablen:
;============================================================================
; how the script detects its working-dir depends on the start method
; if AHK isn't installed (and we only use drag and drop) we have to set
; the working-dir directly, otherwise additional file won't be found
SetWorkingDir %A_ScriptDir%
; also if AHK isn't installed its necessary to set the default include
; path, otherwise the include files won't be found
#Include %A_ScriptDir%
; Recommended for new scripts due to its superior speed and reliability.
SendMode Input
; changes how long the script keeps trying to access the clipboard when the
; first attempt fails [ms]
#ClipboardTimeout 1000
; sync for physical key state. Affects the behavior of hotkey modifiers:
; CTRL, ALT, WIN, and SHIFT. If time in ms has not passed, re-activates
; the initial state.
#HotkeyModifierTimeout 100
; sets the maximum number of keyboard and mouse events displayed by the
; KeyHistory window. You can set it to 0 to disable key history.
#KeyHistory 500
; max memory for variables in MB. Min 1 MB, e. g. to store an image in
; 1280x1024 pixel with 3 bytes/pixel 4 MB will be needed and for full HD
; in 3 bytes/pixel 7 MB.
#MaxMem 512
; avoids checking empty variables to see if they are environment variables
; (recommended for all new scripts).
#NoEnv
; keeps a script permanently running (that is, until the user closes it
; or ExitApp is encountered).
#Persistent
; determines whether a script is allowed to run again when it is already
; running [force|ignore|off].
#SingleInstance force
; Istall Keyboard Hook
#installKeybdHook
; Optimize workingspeed
SetBatchLines, -1
;============================================================================
; Aufbau GUI
;============================================================================
Gui, Main:New
Gui, Color, FFFFFF
Gui, +LastFound +HwndMainGUIHwnd
Gui, Add, Text, x12 y10 w190 h70 +Border +Center vDropFile,`n`nDatei hier ablegen...
Gui, Add, Text, x12 y90 w190 h15 , Doppelklick kopiert die markierte Zeile.
Gui, Add, CheckBox, x12 y110 w170 h15 +checked gAOTLabel, Always on top
Gui, Add, ListView, x12 y130 w190 h160 vLV1 HWNDh_LV1 +BackgroundD9E7FB Grid +AltSubmit -Multi,Ergebnis
Gui, Add, Text, x120 y292 w70 h15, Summe:
Gui, Add, Text, x12 y303 w100 h20 , Export Pfad:
Gui, Add, Edit, x12 y320 w190 h20 ,
Gui, Add, Button, x12 y340 w90 h30 , Pfad
Gui, Add, Button, x112 y340 w90 h30 , Export
Gui, Add, Button, x12 y380 w190 h30 gExitGui, Schließen
Gui, Show,h421 w216, Finder
WinSet, AlwaysOnTop, on
AOT:=1
Return

ExitGui:
GuiClose:
ExitApp

AOTLabel:
if (AOT=1)
	{
		WinSet, AlwaysOnTop, off
		AOT:=0
	}
else
	{
		WinSet, AlwaysOnTop, on
		AOT:=1
	}
Return

GuiDropFiles:
msgbox % A_GuiControl
Return
Wenn ich unter Windows 7 versuche ein Textdatei auf die GUI zu schieben dann geht das nicht.
Kann mir jemand sagen warum das nicht geht?
Hab ich da was falsch gemacht?
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Text nach bestimmten inhalten durchsuchen

09 Jul 2014, 11:46

Es liegt offenbar an der Zeile:
Gui, Main:New
Edit: es scheint, dass wenn ein GUI per new initialisiert wird vor dem Gui welches die Datei erhalten soll, dieses dann die Datei nicht mehr annehmen kann.
Ich nehme daher an, dass das Standard verhalten ist.
Du solltest das Gui,Show.. vor das Gui,new stellen.
Recommends AHK Studio
just me
Posts: 9423
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Text nach bestimmten inhalten durchsuchen

09 Jul 2014, 13:03

Es steht nicht wirklich klar in der Hilfe, aber wenn Du einer Gui einen Namen gibst, brauchst Du auch die Option+Label.... GuiDropFiles funktioniert automatisch nur für Guis mit Nummer 1 oder ohne Nummer.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Text nach bestimmten inhalten durchsuchen

09 Jul 2014, 13:35

Code: Select all

Init1:
Gui,Destroy
Gui,Main:new
Gui,Add,Button,x0 y0 w400 h133 gInit2,All Drops Disallowed
Gui,-Caption
Gui,Show
return

Init2:
Gui,Destroy
Gui,Main:new
Gui,new
Gui,Add,Button,x0 y0 w400 h133 gInit2,All Drops Allowed
Gui,-Caption
Gui,Show
return
Recommends AHK Studio
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Text nach bestimmten inhalten durchsuchen

09 Jul 2014, 16:00

Das mit dem +Label verstehe ich nicht ganz.
Ich muss der GUI keinen Namen geben. Mache es aber eigentlich immer.
Mal angenommen man schreibt ein Tool mit vielen Fenstern und irgendeins soll GuiDropFiles nutzen wie müsste man so eine GUI dann aufbauen?
just me
Posts: 9423
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Text nach bestimmten inhalten durchsuchen

09 Jul 2014, 17:51

@nnnik:

Code: Select all

Init1:
Gui,Destroy
Gui,Main:new
Gui,Add,Button,x0 y0 w400 h133 gInit2,All Drops Disallowed
Gui,-Caption
Gui,Show
return
  1. Gui, Destroy -> versucht, die derzeitige default GUI oder die Gui 1 zu zerstören.
  2. Gui,Main:new -> erzeugt eine neue Gui mit Namen Main und macht sie zur default Gui.
  3. Gui,Add,Button,x0 y0 w400 h133 gInit2,All Drops Disallowed -> erstellt einen Button in der derzeitigen default Gui.
  4. Gui,-Caption -> entfernt Titelzeile und Rahmen der derzeitigen default Gui.
  5. Gui,Show -> zeigt die derzeitige default Gui an.

Code: Select all

Init2:
Gui,Destroy
Gui,Main:new
Gui,new
Gui,Add,Button,x0 y0 w400 h133 gInit2,All Drops Allowed
Gui,-Caption
Gui,Show
return
  1. Gui, Destroy -> versucht, die derzeitige default GUI oder die Gui 1 zu zerstören.
  2. Gui,Main:new -> erzeugt eine neue Gui mit Namen Main und macht sie zur default Gui.
  3. Gui,new -> erzeugt eine neue Gui mit der Nummer 1 und macht sie zur default Gui. Das vorherige Gui,Main:new ist damit sinnlos.
  4. Gui,Add,Button,x0 y0 w400 h133 gInit2,All Drops Disallowed -> erstellt einen Button in der derzeitigen default Gui.
  5. Gui,-Caption -> entfernt Titelzeile und Rahmen der derzeitigen default Gui.
  6. Gui,Show -> zeigt die derzeitige default Gui an.
Das default Guiprefix für die Gui Nummer 1 ist Gui, deshalb funkioniert GuiDropFiles.

@fump2000:
Die Namen der Guilabel bestehen aus zwei Teilen, dem Guiprefix und dem Ereignisnamen. Für das Ereignis DropFiles ist der Ereignisname ebenfalls DropFiles. Für die nummerierten Guis gibt es Standardlabelnamen. Für ein Ereignis der Gui 1 (die Gui heißt auch dann 1, wenn man ihr weder einen Namen noch eine Nummer gibt), heißt das Defaultlabel GuiDropFiles, für die Gui Nummer 2 2GuiDropFiles. Als lexikos die Guinamen eingeführt hat, hat er anscheinend nicht daran gedacht, ihnen auch Standardlabel zuzuweisen. Deshalb funktioniert das nicht:

Code: Select all

#NoEnv
Gui, Main:New
Gui, Show, w600 h400, Main
Return
MainClose:
GuiClose:
   MsgBox, MainClose!
ExitApp
Wie gesagt, Du musst die Labeloption nutzen:

Code: Select all

#NoEnv
Gui, Main:New, +LabelMain ; oder +LabelGui
Gui, Show, w600 h400, Main
Return
MainClose:
GuiClose:
   MsgBox, MainClose!
ExitApp
just me
Posts: 9423
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Text nach bestimmten inhalten durchsuchen

10 Jul 2014, 01:05

Asche auf mein Haupt, lexikos hat natürlich nichts vergessen, man muss nur nachdenken:

Wenn das Standardlabel für Gui, 2:... 2GuiCLose heißt, heißt das Standardlabel für Gui, Main:... logischerweise MainGuiClose. Ich habe das nur lange nicht mehr so genutzt, und schon zu Zeiten, als es nur Guinummern gab, für die Guis mit Nummern <> 1 so gut wie immer die Option +Label verwendet. :cry:

Also: Ohne die Option +Label... ist es hier MainGuiDropFiles.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Text nach bestimmten inhalten durchsuchen

10 Jul 2014, 01:55

Man bin ich manchmal froh, dass ich GUIs so selten benutze.
Recommends AHK Studio
just me
Posts: 9423
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Text nach bestimmten inhalten durchsuchen

10 Jul 2014, 02:27

Ja, jeder Mensch hat eigene Motivationen. Ich hätte nie mit AHK angefangen, wenn es nicht diese 'einfache' Art zur Erstellung von Guis bieten würde. ;)
toralf
Posts: 868
Joined: 27 Apr 2014, 21:08
Location: Germany

Re: Text nach bestimmten inhalten durchsuchen

10 Jul 2014, 05:51

Auch für mich war diese Eigenschaft der Grund mit AHK anzufangen.
ciao
toralf
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Text nach bestimmten inhalten durchsuchen

10 Jul 2014, 06:02

Der Grund für mich mit AHK anzufangen war der, dass man den Effekt den eine Änderung hat direkt sehen kann.
zumindest direkter als bei anderen Sprachen.
Recommends AHK Studio
User avatar
jNizM
Posts: 3183
Joined: 30 Sep 2013, 01:33
Contact:

Re: Text nach bestimmten inhalten durchsuchen

10 Jul 2014, 06:53

Soll ich noch Kaffee und Kuchen holen? HAHA :D :D
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Text nach bestimmten inhalten durchsuchen

10 Jul 2014, 07:37

Ich glaub das jemand bestimmtes noch Kekse hat.
Aber Kuchen wäre auch schön ;)
Recommends AHK Studio
toralf
Posts: 868
Joined: 27 Apr 2014, 21:08
Location: Germany

Re: Text nach bestimmten inhalten durchsuchen

10 Jul 2014, 10:54

Ich kann ein paar Donuts beisteuern. Richtig guten Kuchen gibt es 'hier' nicht. :)
ciao
toralf
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Text nach bestimmten inhalten durchsuchen

10 Jul 2014, 11:46

Ich finde gerade die GUI Erstellung ist mit AHK so einfach wie genial. Ich kann sogut wie alles realisieren und habe schon sehr komplizierte (verschachtelte) GUIs erstellt.
AHK ist die erste Sprache mit der ich in Kontakt kam und bisher habe ich mich an keine andere herangewagt.

Vielen Dank für die Hilfe!
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Text nach bestimmten inhalten durchsuchen

10 Jul 2014, 12:46

Also das File in dem gesucht werden soll hat solchen Inhalt:
+RECHNUNGS-NR.","RM351256989573","","","MAIER MONIKA"
Ich parse nach , und erhalte so im A_LoopField immer den Teil in dem ich nach den Nummern suchen will.

Nutze ich nun RegexMatch(A_LoopField,"\D(125\d{7}|225\d{8}|332\d{7})\D",Out) bleibt Out leider immer leer... eigentlich sollte im 2. durchgang als Ergebnis in Out 1256989573 stehen.

Ich bekomms leider nicht selber hin. Die Optionen für RegExMatch verwirren mich sehr.

Könnte mir bitte jemand auf die Sprünge helfen?

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 43 guests