Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi [TSynEditSearch] mehrzeilige Suche findet nichts (https://www.delphipraxis.net/90280-%5Btsyneditsearch%5D-mehrzeilige-suche-findet-nichts.html)

stz 14. Apr 2007 14:38


[TSynEditSearch] mehrzeilige Suche findet nichts
 
Moin moin,
ich versuche gerade in meinen Editor, der auf SynEdit basiert, eine mehrzeilige Suche einzubauen. Leider scheitere ich völlig. Ich verwende als SearchEngine von SynEdit TSynEditSearch und übergebe dann der Funktion SearchReplace von SynEdit einen Suchstring und einen Haufen Parameter. Solange der Suchstring nur eine Zeile hat, klappt das super, aber kaum ist ein Zeilenumbruch enthalten, klappt nichts mehr: Es wird einfach nichts gefunden. Hat da vielleicht jemand eine Idee, woran das liegen könnte?

Gruß
Malte

uwewo 16. Apr 2007 08:26

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
Zitat:

Zitat von stz
Solange der Suchstring nur eine Zeile hat, klappt das super, aber kaum ist ein Zeilenumbruch enthalten, klappt nichts mehr:

Wie lange ist denn Dein SuchString, und muss er denn wirklich über mhrere Zeilen gehen?
Sollen nur alle Worte des Suchstrings im Text enthalten sein, oder eine korrekte Übereinstimmung gefunden werden?

stz 16. Apr 2007 11:45

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
Es geht um die Suchfunktion in einem ganz normalen Texteditor. Von daher soll eine korrekte Übereinstimmung des ganzen Ausdruckes gefunden werden und je nach dem, was der User eingibt, soll dieser Ausdruck eben auch einen oder mehrere Zeilenumbrüche enthalten. Dies ist zum Beispiel sinnvoll, wenn man Wörter am Ende einer Zeile durch andere ersetzen will. (Natürlich ginge das auch mit REs...)

Hast Du eine Idee, warum TSynEditSearch sich nicht wie von mir erwartet verhält?

Gruß
Malte

uwewo 16. Apr 2007 12:47

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
Hallo Malte,

wie kommt der Zeilenumbruch überhaupt zustande, mit der ENTER Taste oder ...?

stz 16. Apr 2007 13:04

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
Hallo uwewo,
genau. Ich habe allerdings schon mal ein wenig experimentiert und den Zeilenumbruch gegen andere Zeichen ersetzt in der Hoffnung, dass TSynEditSearch nicht #13#10, sondern nur #10 oder nur #13 als Zeilenumbruch erwartet...

Gruß
Malte

uwewo 16. Apr 2007 13:44

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
Im Word und etc. sowie auch hier im Forum, wird der Zeilenumbruch automatisch gesetzt.
Also prüfe doch deine Zeilen auf die Länge, und füge gebenenfalls eine neue Zeile ein dann sollte es qauch mit dem Suchen funktionieren.

stz 16. Apr 2007 13:56

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
:wiejetzt:
Ich glaube wir reden noch aneinander vorbei. Es geht darum, dass der Benutzer in einem ganz normalen Texteditor, den ich programmiere, nach einem bestimmten Text suchen kann. Dabei kann er eben auch einen Zeilenumbruch mit eingeben und sucht dann z.B. nach folgendem:
Delphi-Quellcode:
'Hallo'#$D#$A'Du'
In diesem Fall liefert besagte Such-Engine kein Ergebnis, auch wenn der gesuchten String im gerade bearbeiteten Text im Editor vorkommt. Ich verstehe jetzt nicht so ganz, an welcher Stelle ich bei Bedarf eine Zeile ergänzen kann...

Gruß
Malte

uwewo 16. Apr 2007 14:13

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
Hast Du in Word das mal versucht, denn dort funktioniert das auch nicht!
Nur wenn kein manueller Zeilenumbruch vorhanden ist, findet er den Suchtext.

stz 16. Apr 2007 16:28

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
Die Word-Suche (Word XP) erlaubt keine mehrzeilige Eingabe eines Suchstrings. Man kann nur eine einzige Zeile eingeben und die Funktion, die ich in meinem Editor einbauen möchte, bietet Word somit gar nicht: Der Vergleich hilft mir also leider auch nicht weiter. Nochmal ein Beispiel:
Text im Editor:
Code:
aaaa
bbb
ccc
ddd
eee
fff
ggg
Suchstring:
Code:
c
d
gewünschtes Suchergebnis:
Code:
aaaa
bbb
cc[color=#ff0000]c
d[/color]dd
eee
fff
ggg
Gruß
Malte

bigg 16. Apr 2007 17:25

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
Wenn ich mich recht entsinne ist das Synedit-Projekt Open Source?
Vielleicht solltest du mal einen Blick in die Lib riskieren? :gruebel:


Gruß Stefan

stz 17. Apr 2007 16:22

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
Zitat:

Zitat von bigg
Wenn ich mich recht entsinne ist das Synedit-Projekt Open Source?
Vielleicht solltest du mal einen Blick in die Lib riskieren? :gruebel:

Einen Blick habe ich schon mal riskiert. :roteyes: Eine sehr umfangreiche Sache... Ich habe immer noch die Hoffnung, dass jemand auftaucht und eine ganz einfache Lösung weiß, bevor ich mich ein paar Tage im Source der Komponente verkrieche.

Gruß
Malte

uwewo 18. Apr 2007 06:49

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
Sorry war gestern nicht Online.

Klar biete Word keinen mehrzeiligen Suchtext, aber wenn der gesuchte Text

-----------------------------
Hallo ich
suche Dich
-----------------------------

lautet, und "ich suche" in Word eingibst wird der Text trotzdem gefunden allerdings nur wenn kein manueller Zeilenumbruch vorhanden ist.

Wenn Du ein mehrzeiliges Eingabefeld für den Suchtetxt hast, solltest Du vor der Suche zuerst
alle Zeilenumbrüche in Deinem Text sowie aus dem Suchfeld entfernen.

kalmi01 18. Apr 2007 07:04

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
Zitat:

wird der Text trotzdem gefunden allerdings nur wenn kein manueller Zeilenumbruch vorhanden ist.
genau da liegt doch das Problem.
SynEdit verwaltet die einzelnen Zeilen in einer Stringlist.
Und die SynEdit-Suche sucht demzufolge auch nur Zeichen innerhalb eines Strings (also in Editor.Lines) und nicht String-übergreifend (Editor.Text).
Du müsstest Dir also eine eigene Suche basteln, die in Editor.Text das Vorkommen sucht (z.B.: Pos('mein#13#10text', Editor.Text)) und in eine entsprende Carret-Position umsetzt.
Musst aber beachten, dass SynEdit verschiedene ZeilenEnde-Marker zulässt.

stz 18. Apr 2007 17:07

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
Zitat:

Zitat von kalmi01
SynEdit verwaltet die einzelnen Zeilen in einer Stringlist.

Ich habe ja schon so etwas vermutet, aber ich wollte es nicht glauben. Vielen Dank für die definitive Bestätigung.
Was macht denn Deiner Meinung nach mehr Sinn: Eine ganz eigene Suche entwerfen, oder die Suche von SynEdit entsprechend aufpeppen? Hat sich da vielleicht schon mal jemand dran gewagt?

Gruß
Malte

kalmi01 19. Apr 2007 07:02

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
Moin moin,
Zitat:

Zitat von stz
Was macht denn Deiner Meinung nach mehr Sinn: Eine ganz eigene Suche entwerfen, oder die Suche von SynEdit entsprechend aufpeppen?

was willste denn aufpeppen ?
Delphi-Quellcode:
Pos('mein#13#10text', Editor.Text)
Delphi-Quellcode:
Pos('mein#10text', Editor.Text)
Delphi-Quellcode:
Pos('mein#10text', Editor.Text)
Bringt einer davon Result > 0 dann hast Du die erste Fundstelle.
Wozu da noch an Synedit rumbiegen ?

stz 19. Apr 2007 15:57

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
Nur mir Pos suchen ist ja eher eine Schmalspursuche. Mein Traum von Suche beherrscht ein wenig mehr:
  • Groß- und Kleinschreibung beachten
  • nur ganze Wörter
  • regulärer Ausdruck
  • rückwärts suchen
  • nur im markierten Bereich suchen
  • erst ab Cursorposition suchen
  • Ergebnis in Liste zusammenfassen
Aber das müsste sich auch alles relativ gut einbauen lassen. Ich werde mich mal dranmachen, mir da was zusammenzubasteln.

Gruß
Malte

anse 24. Apr 2007 20:42

Re: [TSynEditSearch] mehrzeilige Suche findet nichts
 
Hast du gesehen daß du als SearchEngine des Editors statt eines TSynEditSearch auch ein TSynEditRegExSearch verwenden kannst? Damit läßt sich wahrscheinlich auch dein Zeilenumbruchproblem lösen. Wobei es nicht ratsam wäre, eine Suche immer im RegEx-Modus auszuführen. Das sollte vom Benutzer per Checkbox eingeschaltet werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz