[Off Topic] "Sonderzeichen bei der Suche ignorieren"

German support forum

Moderators: white, Hacker, Stefan2

Post Reply
phantom
Power Member
Power Member
Posts: 671
Joined: 2003-11-21, 15:34 UTC

[Off Topic] "Sonderzeichen bei der Suche ignorieren"

Post by *phantom »

Ich nehme mir immer wieder vor mich mit "Reguläre Ausdrücke" zu beschäftigen. Was zu meiner Schande immer noch nicht geschehen ist.

Kann mir mal jemand auf die Sprünge helfen? Wie kann ich bei der Suche bestimmte Sonderzeichen ignorieren?


Beispiel:

Suche alle Texte "Speichern" wobei an beliebiger Stelle ein "&" stehen kann.


Lösungsansatz:

Entweder ignoriert man bei der Suche das Sonderzeichen "&" oder das Sonderzeichen "&" kann an jeder Stelle des Wortes vorkommen.
User avatar
Stefan2
Power Member
Power Member
Posts: 4132
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: [Off Topic] "Sonderzeichen bei der Suche ignorieren"

Post by *Stefan2 »

Wo? Wie? Was? suchst du denn?


Mit dem TC?
Nach Dateinamen?
Nach Dateien mit Inhalt xyz?


 
phantom
Power Member
Power Member
Posts: 671
Joined: 2003-11-21, 15:34 UTC

Re: [Off Topic] "Sonderzeichen bei der Suche ignorieren"

Post by *phantom »

Entschuldige, ich dachte es macht keinen Unterschied.

Im Grunde benötige ich die Hilfe bei der Suche für meinen Texteditor EmEditor. Dieser unterstützt wie der TC bei der Suche "Reguläre Ausdrücke".

Ich möchte die *.lng-Datei Editieren, dabei stören bei der Textsuche immer wieder Sonderzeichen wie "&, %,$,\n,\r,\t,..."

Beispiel für mein Problem:

Suche alle Texte "Speichern" wobei an beliebiger Stelle ein "&" stehen kann. Es soll bspw. beide Texte "Speic&hern" und "S&peichern" gefunden werden.
Franz Müller
Senior Member
Senior Member
Posts: 383
Joined: 2005-05-24, 10:41 UTC
Location: Wien

Re: [Off Topic] "Sonderzeichen bei der Suche ignorieren"

Post by *Franz Müller »

Puh, das dürfte bei der Eingabe mühsam sein. Etwas besseres als
s&?p&?e&?i&?c&?h&?e%?r&?n
fällt mir nicht ein, wenn mehrere verschiedene Sonderzeichen ignoriert werden sollen, wird es noch mühsamer.
Die Eingabe kannst du dir allerdings mit Hife von AHK vereinfachen, indem du den String "&?" (oder gar "[&%\$\n\r\t]?" zu einem Hotkey machst, den du dann nach jedem Buchstaben mit nur einem Tastendruck in den Regex-Suchstring einfügst.
User avatar
Stefan2
Power Member
Power Member
Posts: 4132
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: [Off Topic] "Sonderzeichen bei der Suche ignorieren"

Post by *Stefan2 »

2phantom
"Reguläre Ausdrücke" sind kein Standard, sondern nur eine allgemeine Beschreibung einer Funktion.
Es existieren verschiedene Engines und teilweise auch (über Jahre) mehrere Versionen dieser Implementierungen.
Jedes Programm kann die Unterstützung von "Reguläre Ausdrücke" in unterschiedlicher Art einbauen.

Total Commander verwendet die freie Delphi-Bibliothek TRegExpr von Andrey V. Sorokin:
viewtopic.php?p=323986#p323986

EmEditor verwendet Boost.Regex und inzwischen auch Onigmo:
https://www.emeditor.com/text-editor-features/history/new-in-version-15-7/#new_regular_exp_engine


Von daher ist es sehr interessant zu wissen, worum es genau geht,... sonst fängt man zweimal an...


- - -

Franz Müllers' Ausdruck ist für dein Anliegen tatsächlich passend: &?s&?p&?e&?i&?c&?h&?e&?r&?n ;-)

&? bedeutet hier,... ehem,... damit ich mir keinen Text ausdenken muss, hier die Beschreibung von AutoHotkey:

https://ahkde.github.io/docs/misc/RegEx-QuickRef.htm
Ein Platzhalter, der überprüft, ob das vorherige Element (Zeichen, Klasse oder Teilsuchmuster) vorkommt oder nicht.
Oder auch: "Das voranstehende Element ist optional". (Einmal oder Keinmal)
Zum Beispiel würde colou?r sowohl mit color als auch mit colour übereinstimmen, weil das "u" optional gemacht wurde.

(An anderer Stelle, bei anderer Verwendung, hat das ?-Fragezeichen auch mal eine ganz andere Bedeutung)



Da das mnemonik (& für unterstrichener Buchstabe) meistens weit vorne im Wort eingebaut wird,
suche ich bei so etwas gerne nach dem Wortende: chern ; ok, man muss halt ein paar mal F3 drücken ;-)



Um dir ein solches Suchmuster zu erstellen, nimm eine leere Seite im EmEditor, schreibe deinen Suchtext:
Speichern

und Suche&Ersetze
Suche: (.)
Ersetze: &?$1
[x] RegEx
[Alles Ersetzen]

&?S&?p&?e&?i&?c&?h&?e&?r&?n



- - -

Eventuell hilft dir auch ein Trick17:
- kopiere den Text / die Datei
- entferne alle Sonderzeichen (suche&ersetze)
- suche dort deinen Begriff und merke dir die Zeile
- gehe dann im original Text zu eben dieser Zeile (Strg+G)



 
phantom
Power Member
Power Member
Posts: 671
Joined: 2003-11-21, 15:34 UTC

Re: [Off Topic] "Sonderzeichen bei der Suche ignorieren"

Post by *phantom »

Danke euch beiden. So richtig praktikabel ist das dann doch nicht. Die genannten Tricks verwende ich natürlich auch immer. Ich meine, ich hätte mich schon mal damit beschäftigt und einen Editor gefunden der in der Lage war Zeichen wie "&" für die unterstrichenden Buchstaben bei der Suche zu ignorieren.
User avatar
Stefan2
Power Member
Power Member
Posts: 4132
Joined: 2007-09-13, 22:20 UTC
Location: Europa

EmEditor VBS Macro: Sonderzeichen bei der Suche ignorieren

Post by *Stefan2 »

phantom wrote: 2019-02-14, 09:19 UTC Danke euch beiden. So richtig praktikabel ist das dann doch nicht. Die genannten Tricks verwende ich natürlich auch immer. Ich meine, ich hätte mich schon mal damit beschäftigt und einen Editor gefunden der in der Lage war Zeichen wie "&" für die unterstrichenden Buchstaben bei der Suche zu ignorieren.
Du kannst den EmEditor an deine Bedürfnisse anpassen.

Hier ist ein Skript, welches deine Suchbefehl abarbeitet, und dabei spezielle Markierungssymbole ignoriert.
Diese Symbole musst du im Skript in der "CleanLine" Funktion noch entsprechend anpassen.

Dieses Skript (hier Macro genannt) kannst du
- entweder im Snippet-Plugin als Macro speichern, und gleich mal das Tastaturkürzel Strg+Umschalt+Alt+F zuweisen,

- oder als xxx.vbee Textdatei im EmEditor (macro?) -Ordner speichern, als "MyMacro" definieren und
über "Tools > Properties for >>>>> Keyboard >> Category: My Macros >> Commands: xxx.vbee" einen Tastaturkürzel zuweisen.

Code: Select all

#language = "VBScript"
'//VBScript macro for EmEditor
'//Stefan, v001, 2019-02-14
'//https://ghisler.ch/board/viewtopic.php?p=351583#p351583
'//Purpose: search a plain string, even if the real text contains special markup sign(s).
'//Example: find the word "Save", even if text reads "&Save" or "S&ave" or "Sa&ve" or...
'//User Settings: adjust the replace() command in CleanLine-function to your needs.
'=========================================================
' prompt for search string
strDefault = editor.GetProfileString( eeRegEmEditorUsers, "SearchAndGo", "searchStr", "was du suchen?")
searchStr = prompt("Search String", strDefault)
	If searchStr = "" Then Quit
editor.WriteProfileString eeRegEmEditorUsers, "SearchAndGo", "searchStr", searchStr
'
' get active line pos and call search function
CurrentLine = document.selection.GetActivePointY(eePosLogical)
CurrentColumn = document.selection.GetActivePointX(eePosLogical) 
Result = SearchAndGo(CurrentLine, CurrentColumn+Len(searchStr))
If Not (Result) Then SearchAndGo 1,1
Quit
'	
Function SearchAndGo(iStartLine,iStartColumn)
	For yLine = iStartLine to document.GetLines()
	 	LineText = document.GetLine(yLine, eeGetLineWithNewLines)
		SearchText = CleanLine(LineText)
		xColumnPos=InStr(iStartColumn, SearchText, searchStr, 1)
		If (xColumnPos) then
			document.selection.SetActivePoint eePosLogical, xColumnPos, yLine, false 
			SearchAndGo = True
			Exit For
		End If
	iStartColumn=1
	Next
End Function 'SearchAndGo
'
Function CleanLine(strInput)
    '//Search and replace signs (like '&') in strInput/LineText string temporally 
    '// to not disturb e.g. the search for "Save", and so even find "&Save" or "S&ave" or "Sa&ve" or... too.
        '//Adjust the "CleanLine = replace()" lines to your needs, or add additional one.
        '//CleanLine = replace(CleanLine,"findme1","replacewith")
        '//CleanLine = replace(CleanLine,"findme2","") '<< remove 'findme2'

		CleanLine = strInput
	 	CleanLine = replace(CleanLine,"&","")
	 	'CleanLine = replace(CleanLine,"X","")
	 	'CleanLine = replace(CleanLine,"Y","")
		 '//alert(strInput & vbLF & CleanLine)
End Function 'CleanLine
'

Falls Bedarf an weiteren Details besteht, bitte melden.



HTH? :D
phantom
Power Member
Power Member
Posts: 671
Joined: 2003-11-21, 15:34 UTC

Re: [Off Topic] "Sonderzeichen bei der Suche ignorieren"

Post by *phantom »

Ich nutze zwar sehr häufig den EmEditor, zumindest einmal am Tag, aber mit Snippet und Macros kenne ich mich nicht aus.

Aber als ich dann was du suchen? :D gesehen habe, wußte ich was mit "CleanLine" gemeint ist und dass ich irgend etwas richtig gemacht haben muss. Das Macro oder Snippet, wo ist da der Unterschied?, ist noch etwas ausbaufähig. Funktioniert zum Teil schon mal. Seltsamerweise wird auch " speichern" mit einem Leerzeichen gefunden.

Wünschenswert wäre auch etwas mehr kompfort wie F3 für weitersuchen und Treffer farbig hervorheben. Aber sonst ganz großartig, dass du in der Lage bist mal eben so ein Script zu schreiben.


\\Edit


Folgendes konnte ich beobachten:

- befindet sich das "&"-Zeichen weder vor dem noch innerhalb des gesuchtem Textes, springt der Cursor ein Leerzeichen vor dem gesuchten Text.
- kommt in einer Zeile gar kein "&" vor, wird der gefundene Text richtig markiert (Cursor markiert den Wortanfang)

-> oder anders Ausgedrückt: kommt das "&"-Zeichen in einer Zeile an einer anderen Stelle als dem gesuchten Text vor, wird das Leerzeichen vor dem Treffer markiert
Post Reply