Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Memo/Richedit durchsuchen & kopieren (https://www.delphipraxis.net/113538-memo-richedit-durchsuchen-kopieren.html)

Counter909 9. Mai 2008 13:47


Memo/Richedit durchsuchen & kopieren
 
Moin

also ich bin gerade an so einem kleinem Programm, was am Ende können sollte:
ich schreibe einen Text in einem Richedit Feld oder kann eine .txt mit einem Button laden, das funktioniert auch alles soweit (auch nicht weiter schwer :roll: ).
Sagen wir, ich habe jetzt einen Text, der ca 4 Seiten oder so ist und nun möchte ich in einem Edit-Feld zum Beispiel ein Wort eingeben und das sucht er dann in dem text und kopiert es anschließend auch, sodass das kopierte in eine neue Tstringlist eingefügt wird und abgespeichert werden kann ( das ist dann ja auch wieder recht einfach).


Also mir gehts eigentlich nur ums suchen bzw. das Gesuchte kopieren. Ist es einfacher in dem Richedit selber zu suchen oder die .txt zu durchsuchen ?


mfg
counter

LordPsychoter 9. Mai 2008 13:56

Re: Memo/Richedit durchsuchen & kopieren
 
Die Suche hilft manchmal..

Klick mich

RavenIV 9. Mai 2008 14:01

Re: Memo/Richedit durchsuchen & kopieren
 
Du kannst auf den Text per TRichEdit.Lines.Text zugreifen.
Dann ist der Text als ein String repräsentiert.
Darin kannst Du mit Pos pder PosEx oder StrPos nach dem Wort suchen.
Oder Du benutzt eine andere Funktion aus der Kategorie String-Verarbeitung.

p80286 9. Mai 2008 16:14

Re: Memo/Richedit durchsuchen & kopieren
 
Hallo Counter909,

warum willst Du ein Wort was in einem Edit-Feld steht in einem anderen (Text-)Feld suchen, und dann, wenn es da sein sollte, aus diesem Text-Feld heraus in eine Stringliste kopieren?

Nimm doch einfach den Inhalt des Edit-Feldes und pack ihn in Deine Stringliste wenn Du das Wort gefunden hast.
Der Unterschied ist nicht so groß bei 4 Seiten aber wenn's mehr wird ...

Gruß
K-H

Counter909 9. Mai 2008 23:52

Re: Memo/Richedit durchsuchen & kopieren
 
ne also ich will in einem edit Feld ein wort eingeben, das ich suche und in einem zweiten Feld die Anzahl der Zeile nach dem wort... sodass die dann herauskopiert werden und einer neuen stringlist hinzugefügt werden :-)

Blackheart 10. Mai 2008 00:07

Re: Memo/Richedit durchsuchen & kopieren
 
Zitat:

Zitat von Counter909
ne also ich will in einem edit Feld ein wort eingeben, das ich suche und in einem zweiten Feld die Anzahl der Zeile nach dem wort... sodass die dann herauskopiert werden und einer neuen stringlist hinzugefügt werden :-)

Damit sind nun endgültig alle Klarheiten beseitigt ! :wink:

Counter909 10. Mai 2008 09:21

Re: Memo/Richedit durchsuchen & kopieren
 
:D also das ist hier zum beispiel ein Text: (nachrichten :D)

Zitat:

Alle 73.000 Mitarbeiter des Münchner Autokonzerns BMW erhalten dieses Jahr die bislang höchste Gewinnbeteiligung. Durchschnittlich kassieren sie eine Prämie von 5.600 Euro.
Auf der Hauptversammlung des weiß-blauen Autobauers wurden auch die Aktionäre mit 1,06 Euro pro Stammaktie bedacht. Niedrigere Gewinne habe BMW im größten Absatzmarkt USA hinnehmen müssen. Dort haben sich durch den Dollar-Verfall 40 Prozent an Ertragseinbußen für den Autokonzern ergeben.
Der Vorstandsboss Norbert Reithofer erwartet dennoch für das laufende Jahr neuerliche Absatzrekordzahlen für alle Modelle und Marken. Im US-Fertigungswerk Spartanburg (South Carolina) sollen jährlich künftig 240.000 Autos gebaut werden, gab Reithofer bekannt. Quelle: www.abendzeitung.de
möchte das nur an einem Beispiel etwas deutlicher machen!

jetzt gebe ich im edit Feld zum beispiel das Wort "BMW" ein und im zweiten eine "4" zum Beispiel...dann würde er 4 Zeilen nach dem Wort BMW herauskopieren!

Zitat:

BMW erhalten dieses Jahr die bislang höchste Gewinnbeteiligung. Durchschnittlich kassieren sie eine Prämie von 5.600 Euro.
Auf der Hauptversammlung des weiß-blauen Autobauers wurden auch die Aktionäre mit 1,06 Euro pro Stammaktie bedacht. Niedrigere Gewinne habe BMW im größten Absatzmarkt USA hinnehmen müssen. Dort haben sich durch den Dollar-Verfall 40 Prozent an Ertragseinbußen für den Autokonzern ergeben.
ich hab das bis jetzt nur so, dass ich zwei Wörter eingeben muss: also wo er beginnt zu kopieren und das wort wo er aufhören soll, aber das mit Zeilen finde ich besser, hat vllt einer ein denkanstoß ? :-)

p80286 13. Mai 2008 09:37

Re: Memo/Richedit durchsuchen & kopieren
 
Hallo Counter909,
falls Du übers Wochenende nicht darauf gekommen bist:
Definiere die Zeilenanzahl n,
suche Deine Startzeile,
kopiere sie (ab gefunden pos) in Deine Stringlist
kopiere die nächsten n-1 Zeilen in die Stringlist
fertig!

Gruß K-H

Counter909 13. Mai 2008 21:18

Re: Memo/Richedit durchsuchen & kopieren
 
also ich bin übers Wochenende sehr weit gekommen bzw hab das auch schon gut fertig....aber ich hab es bis jetzt nur so gemacht, dass ein beliebiges Wort gesucht werden kann mit "pos(...)" und in einem weiter Edit-Feld kann man ein Zahl eingeben, die in einer Variable(k) gespeichert wird.

anschließend mache ich Copy(pos('gesuchtewort'..,k)

so funktioniert das ja schonmal ganz gut, aber ich hab es eben noch nicht hinbekommen ,dass ich eine ganze Zeile definieren kann, was vermutlich um einiges einfacher ist, weil die Pos-Werte in die Hunderte gehen!

also wie kann ich eine Zeile definieren ?

Blackheart 13. Mai 2008 21:20

Re: Memo/Richedit durchsuchen & kopieren
 
lines

Counter909 14. Mai 2008 14:06

Re: Memo/Richedit durchsuchen & kopieren
 
ja ok...aber wie such in dann ein wort mit "pos" in einer "Line" ?
pos gibt doch nur ein integer-wert wieder, an welcher Position das wort steht eben ^^

Counter909 15. Mai 2008 18:13

Re: Memo/Richedit durchsuchen & kopieren
 
wenn ich die Position meines gesuchten wortes mit

"t:= pos('gesuchtetext',form1.richedit1.Lines.Text)"

herausfinde...woher weiß ich dann, in welcher Zeile das ist ? (lines[?]) ?
denn T wäre in diesem Fall ja eine Integer-Zahl!

Blackheart 16. Mai 2008 21:20

Re: Memo/Richedit durchsuchen & kopieren
 
Du gehst doch sicherlich deinen Text mit einer Schleife durch
lines[i] liefert dir dann die entsprechende Zeile.

wazup 16. Mai 2008 22:10

Re: Memo/Richedit durchsuchen & kopieren
 
Hi

TRegExpr, for-Schleife

Counter909 17. Mai 2008 10:37

Re: Memo/Richedit durchsuchen & kopieren
 
die position kann ich dann ja so erhalten:

Delphi-Quellcode:
for Index := Memo2.Lines.Count - 1 downto 0 do
      begin
        Position := Pos(form1.Edit1.Text, Memo2.Lines[Index]);
        if Position > 0 then showmessage('+inttostr(position)+''
      end;

so dann hab ich ja mein Feld wo ich eingeben kann, wieviele Zeilen kopiert werden sollen, also

Delphi-Quellcode:
n:=edit1.text

logischerweise um kann ich dann doch "position+n", sodass ich die endzeile habe, bis wo kopiert werden soll, aber

Delphi-Quellcode:
copy(memo2.Lines.Text,?,??);}
aber hier werden ja nur nur die "Pos" werte verlangt und keine zeile :-(

Matze 17. Mai 2008 10:53

Re: Memo/Richedit durchsuchen & kopieren
 
Hallo,

du hast doch deinen Zeilen-Index "Index" und die Position des Wortes in dieser Zeile "Position".

Dann kannst du aus Memo2.Lines[Index] mit Delphi-Referenz durchsuchenCopy, "Position" und "n" doch das herauskopieren, was du möchtest:

Delphi-Quellcode:
Copy(Memo2.Lines[Index], Position, n);
Nur solltest du "Index" nicht direkt verwenden, sondern in der Schleife einer anderen Variable diesen Wert zuweisen, denn nach der Schleife könnte "Index" undefiniert sein. Das habe ich kürzlich gelernt und wusste es davor auch nicht:

Delphi-Quellcode:
for ...
  if Position > 0 then
    RowIndex := Index;

// ...
Dann nimmst du als 2. Copy-Parameter "RowIndex".

Grüße

Blackheart 17. Mai 2008 19:42

Re: Memo/Richedit durchsuchen & kopieren
 
Zitat:

Zitat von Matze
Hallo,

du hast doch deinen Zeilen-Index "Index" und die Position des Wortes in dieser Zeile "Position".

Dann kannst du aus Memo2.Lines[Index] mit Delphi-Referenz durchsuchenCopy, "Position" und "n" doch das herauskopieren, was du möchtest:

Delphi-Quellcode:
Copy(Memo2.Lines[Index], Position, n);
Nur solltest du "Index" nicht direkt verwenden, sondern in der Schleife einer anderen Variable diesen Wert zuweisen, denn nach der Schleife könnte "Index" undefiniert sein. Das habe ich kürzlich gelernt und wusste es davor auch nicht:

Delphi-Quellcode:
for ...
  if Position > 0 then
    RowIndex := Index;

// ...
Dann nimmst du als 2. Copy-Parameter "RowIndex".

Grüße

Etwas viel Zitat - Delphi weisst darauf hin das der Wert nicht mehr stimmten könnte was aber nicht sein muss. :wink:

Counter909 19. Mai 2008 14:57

Re: Memo/Richedit durchsuchen & kopieren
 
soooo, danke leute, ich hab es endlich hinbekommen, auch mit meiner Eingabe wieviele Zeilen kopiert werden....wie es nun mal ist, ich hatte auch einen kleinen Fehler mit einer Variable, darum klappte was nicht :shock:


also vielen dank leute :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 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