Autor Beitrag
KeinePanik
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131



BeitragVerfasst: Mo 25.11.02 20:25 
Hi ...

Nach langer Zeit hab ich nen neues Projekt angefangen und bin auch etwas eingerostet user defined image

... Aber zum Problem ...

Ich lasse eine relativ grosse *.doc-Datei (Nur Text) in ein RichEdit einlesen ...

Nun möchte ich in dem RichEdit nach einer bestimmten Zeichenfolge (String) suchen und ersetzen ... Ich hab schon hier im AUQ gesucht, da hab ich aber nur ein Thema gefunden, dass sich mit "einem Zeichen in einem String" beschäftigt ... dort geht das mit POS ...

Wie kann ich das also machen ???

_________________
Es gibt keine dummen Fragen ... Nur blöde Antworten !!!
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Mo 25.11.02 20:31 
guck mal inder Hilfe nach RichEdit.FindText.

ausblenden Quelltext
1:
RichEdit1.FindText('Test',1,Length(RichEdit1.Text),[stMatchCase]);					

_________________
Viele Grüße
Jakob
KeinePanik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131



BeitragVerfasst: Mo 25.11.02 20:34 
Ah ja ...

Hab ich gar nicht gesehen ... danke ...

_________________
Es gibt keine dummen Fragen ... Nur blöde Antworten !!!
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mo 25.11.02 20:36 
Hallo,

Richedit hat die Methode Findtext mit der du innerhalb des Richedits suchen kannst. Da ist in der Hilfe auch ein Beispiel mit dabei, wo mit hilfe des Finddialogs ein String gesucht wird.

Mfg Frank

edit : arrg, zu langsam

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Mo 25.11.02 21:00 
Zitat:
edit : arrg, zu langsam


und das, obwohl meine Hand kaputt ist :wink: :?

_________________
Viele Grüße
Jakob
KeinePanik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131



BeitragVerfasst: Mo 25.11.02 23:21 
So ...

Wegen der Suche nach einem String innerhalb eines Textes ist klar ....

Jetzt habe ich allerdings ne Textdatei die in etwa so aussieht :

ausblenden Quelltext
1:
2:
3:
4:
irgendwelcher text ...
Die nachfolgende Zeile beinhaltet, den zu suchenden String :
-anfang -der gesuchte String -ende
weiterer Text ...


Da ich in meinem Programm jetzt also den "Zwischentext" zwischen der Zeichenkette "-anfang" und "-ende" haben will, sieht mein Code im Moment so aus :

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure read_txt;
var
rich_start, rich_end: integer;
pos1, pos2, posmark: LongInt;
begin // read_txt

rich_start := 0; //STart der Suche bei Position 0
rich_end := form1.rich.GetTextLen;

pos1 := form1.rich.FindText('-start', rich_start, rich_end, [stMatchCase]);
pos2 := form1.rich.FindText('-ende', rich_start, rich_end, [stMatchCase]);

posmark := form1.rich.FindText('', pos1, pos2, [stMatchCase]); // "posmark" soll den Text dazwischen markieren, bzw. ersetzen ... hier weiss ich nicht weiter ...

showmessage('Prozedure read_txt : POS1 = '+ inttostr(pos1) + '... POS2 = '+inttostr(pos2));

end;// read_txt


Also irgendwie hab ich nen Blackout ... wie kann ich jetzt den String zwischen den beiden erkannten Positionen erkennen ?? ( in dem Fall soll der String "-der gesuchte String" durch einen anderen ersetzt werden !


achso ... Und nochwas :

In der Delphi-Hilfe (Vers. 4.0) steht zu "RichEdit.FindText" folgendes :

Zitat:

function FindText(const SearchStr: string; StartPos, Length: Integer; Options: SearchTypes): integer;

Beschreibung

Mit Hilfe von FindText (...) Mit Options kann festgelegt werden, ob nur nach ganzen Wörtern gesucht oder die Groß-/Kleinschreibung berücksichtigt werden soll.


Leider kann man in der Hilfe keine Einstellungen für diese Optionen finden ... Ich müsste schon einstellen können, dass die Gross- und Kleinschreibung keine Rolle spielt ! ... und : was bedeutet das "[stMatchCase]" genau ?

_________________
Es gibt keine dummen Fragen ... Nur blöde Antworten !!!
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Di 26.11.02 09:16 
Hallo

weitere Stichworte: selstart,sellength,seltext

schau dir mal das Beispiel zu Richedite in der Hilfe an. Dort wird das markieren eines gefundenen Strings erklärt. Du mußt dann halt die Markierung um die Länge von '-start' verschieben. um den Text zu ersetzen, brauchst du nur Seltext zu ändern.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
KeinePanik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131



BeitragVerfasst: Di 26.11.02 14:02 
Nochmal so ...

Ich hab jetzt das Beispiel aus der Delphi-Hilfe (was ich auch schon vorher aufgerufen hatte, aber für mich etwas umständlich) genommen und mir ne kleine Prozedur gebastelt :

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure read_txt(const such1, such2:string; plus, minus: integer; schreib: tcaption);
var
pos1, pos2: LongInt;
StartPos, ToEnd: integer;
ergebniss : string;
begin
  with form1.rich_text do
  begin 
      StartPos := 0;
      ToEnd := Length(Text) - StartPos;
      pos1 := FindText(such1, StartPos, ToEnd, [stMatchCase]);
      StartPos := 0;
      ToEnd := Length(Text) - StartPos;
      pos2 := FindText(such2, StartPos, ToEnd, [stMatchCase]);

      SelStart := pos1 + plus;
      SelLength := pos2 - pos1 - minus;
      ergebniss := seltext;
      schreib := ergebniss;
  end;
end;


In meinem Beispiel mit meiner Textdatei da oben, müsste ich die Prozedur folgendermassen aufrufen :

ausblenden Quelltext
1:
read_txt('-start', '-ende', 7, 8, edit1.text);					


So weit so schlecht ...
Der gesuchte Text wird zwar im RichEdit markiert und auch in der Variablen "ergebniss" gespeichert, aber ich will ihn dann auch noch in ein Edit.text - Feld schreiben ... doch dort wird der Wert nicht angezeigt !

Gruss KP

P.S.: Ich sollte vielleicht ne Funktion draus machen, die nen string zurückgibt ....

_________________
Es gibt keine dummen Fragen ... Nur blöde Antworten !!!
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Di 26.11.02 19:25 
Hallo nochmal,

Zitat:


P.S.: Ich sollte vielleicht ne Funktion draus machen, die nen string zurückgibt ....
das wär vielleicht auch besser, dann gehts nämlich. :lol:

ausblenden Quelltext
1:
procedure read_txt(const such1, such2:string; plus, minus: integer; schreib: tcaption);					

wenn schon, dann müßte dort stehen ... Var schreib ...- du willst doch was zurückgeben ; geht aber nich, meckert der Compiler.
Ich habs kurz probiert und mit der ganzen Sache als Function hats geklappt.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
KeinePanik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131



BeitragVerfasst: Mi 04.12.02 07:55 
Hab jetzt auch ne Funktion draus gemacht ... funzt wunderbar ...

Nächstes Problem :

In meinem Text gibt es jetzt mehrere "-anfang" und "-ende"'s ...

Ich will nun die Anzahl der "-anfang"'s ermitteln ... bei ner DB würde ich das mit "findnext" (oder so) machen .... wie geht das aber jetzt mit einer txt-Datei bzw. mit einem richedit.lines !?!?!?

also ne funktion, die erstmal die Treffer liefert (integer) wieviel "-anfang"'s es gibt !?!?

In der Delphi-Hilfe hab ich schon nachgeschaut (inkl. BSP) aber das sucht nur nach Dateien ... ... ...

_________________
Es gibt keine dummen Fragen ... Nur blöde Antworten !!!
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Do 05.12.02 22:45 
Hallo

du kannst mit einer Schleife, einem Zähler und Findtext arbeiten.

innerhalb der schleife suchst du immer den Begriff, solange bis findtext = -1 is (nix mehr gefunden). damit das nächste Wort gefunden werden kann, mußt du im nächsten Schleifenaufruf dann ab der Pos+länge suchen..

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
KeinePanik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131



BeitragVerfasst: Fr 06.12.02 02:09 
sorry ... ich hab nicht geschrieben, dass ich das bereits gelösst hatte ... schleife ist ja auch irgendwie logisch ... also Thema erstmal abgehakt !!

_________________
Es gibt keine dummen Fragen ... Nur blöde Antworten !!!