Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Text aus einem Richedit kopieren (https://www.delphipraxis.net/207571-text-aus-einem-richedit-kopieren.html)

NoGAD 9. Apr 2021 22:56

Text aus einem Richedit kopieren
 
Hallo,

ich wollte ein Richedit benutzen, um aus folgenden Zeilen die Namen und andere Daten auszulesen. Dabei habe ich nur am Anfang der Zeilen folgenden Indikator:
Code:
: [[
Meine Versuche, mittels FindText und SelText die entsprechenden Stellen heraus zu kopieren, scheitern an irgendeiner Logik.

Mein Inhalt vom Richedit:

Code:
__NOTOC__

{{SubTOC|Titel=Liste von Autoren|Index=Liste von Autoren}}

== Aa ==
: [[Bertus Aafjes]] (1914–1993), NL
: [[Jeppe Aakjær]] (1866–1930), DK
: [[Johannes Aal]] (um 1500–1551), CH
: [[Hans Aanrud]] (1863–1953), NO
: [[Emil Aarestrup]] (1800–1856), DK
: [[Soazig Aaron]] (* 1949), FR
: [[Ivar Aasen]] (1813–1896), NO

== Ab ==
: [[Petrus Abaelardus]] (1079–1142), FR
: [[Sait Faik Abasıyanık]] (1906–1954), TR
: [[Lynn Abbey]] (* 1948), US
: [[Jacob Abbott]] (1803–1879), US
: [[John Stevens Cabot Abbott]] (1805–1877), US
: [[Abdullah bin Abdul Kadir]] (1795–1852), MAL
: [[Abe Kōbō]] (1924–1993), JP
: [[Rebecca Abe]] (* 1967), D

Meine Funktion, um nur die Werte (in ein anderes Richedit) zu übertragen. (Für die visuelle Darstellung, ob es klappt.

Delphi-Quellcode:
function SearchForText(RichEdit: TRichEdit; SearchText: string; var Dummy_StringList: TStringList): boolean;
var
  Startpos, Position, Endpos, x: Integer;
begin
  Startpos := 0;
  x := 1;
  with RichEdit do
  begin
    Endpos := Length(Text);
    Lines.BeginUpdate;
    while FindText(SearchText, Startpos, Endpos, []) <> -1 do
    begin
      Endpos := Length(Text) - Startpos;
      Position := FindText(SearchText, Startpos, Endpos, []);
      Startpos := Position;
      inc(Startpos, Length(SearchText));

      Endpos := FindText(SearchText, Startpos, Endpos, []);

      SelStart := Position;
      SelLength := Endpos - Length(SearchText);

      Dummy_StringList.Add(x.ToString + #32 + SelText);
      inc(x);

      Startpos := Endpos;
      Endpos := Length(Text);

    end;
    Lines.EndUpdate;
  end;
end;
Im Grunde möchte ich ja den Text zwischen ': [[' und ': [[' kopieren. Heraus kommt aber leider:


Code:
1 : [[Bertus Aafjes]] (1914–1993), NL
: [[Jeppe Aakjær]] (1866–1930), DK
: [[Johannes Aal]] (um 1500–1551), CH
: [
2 : [[Jeppe Aakjær]] (1866–1930), DK
: [[Johannes Aal]] (um 1500–1551), CH
: [[Hans Aanrud]] (1863–1953), NO
: [[Emil Aarestrup]] (1800–1856), DK
: [
3 : [[Johannes Aal]] (um 1500–1551), CH
: [[Hans Aanrud]] (1863–1953), NO
: [[Emil Aarestrup]] (1800–1856), DK
: [[Soazig Aaron]] (* 1949), FR
: [[Ivar Aasen]] (1813–1896), NO

== Ab ==
:
4 : [[Hans Aanrud]] (1863–1953), NO
: [[Emil Aarestrup]] (1800–1856), DK
: [[Soazig Aaron]] (* 1949), FR
: [[Ivar Aasen]] (1813–1896), NO

== Ab ==
: [[Petrus Abaelardus]] (1079–1142), FR
: [[Sait Faik Abas&#305;yan&#305;k]] (1906–
5 : [[Emil Aarestrup]] (1800–1856), DK
: [[Soazig Aaron]] (* 1949), FR
: [[Ivar Aasen]] (1813–1896), NO

== Ab ==
: [[Petrus Abaelardus]] (1079–1142), FR
: [[Sait Faik Abas&#305;yan&#305;k]] (1906–1954), TR
: [[Lynn Abbey]] (* 1948), US
: [[Jacob Abbott]] (1803–1879),
6 : [[Soazig Aaron]] (* 1949), FR
: [[Ivar Aasen]] (1813–1896), NO

== Ab ==
: [[Petrus Abaelardus]] (1079–1142), FR
: [[Sait Faik Abas&#305;yan&#305;k]] (1906–1954), TR
: [[Lynn Abbey]] (* 1948), US
: [[Jacob Abbott]] (1803–1879), US
: [[John Stevens Cabot Abbott]] (1805–1877), US
: [[Abdullah bin
7 : [[Ivar Aasen]] (1813–1896), NO

== Ab ==
: [[Petrus Abaelardus]] (1079–1142), FR
: [[Sait Faik Abas&#305;yan&#305;k]] (1906–1954), TR
: [[Lynn Abbey]] (* 1948), US
: [[Jacob Abbott]] (1803–1879), US
: [[John Stevens Cabot Abbott]] (1805–1877), US
: [[Abdullah bin Abdul Kadir]] (1795–1852), MAL
: [[Abe K&#333;b&#333;]] (1924–1993), JP
: [[Rebecca A
8 : [[Petrus Abaelardus]] (1079–1142), FR
: [[Sait Faik Abas&#305;yan&#305;k]] (1906–1954), TR
: [[Lynn Abbey]] (* 1948), US
: [[Jacob Abbott]] (1803–1879), US
: [[John Stevens Cabot Abbott]] (1805–1877), US
: [[Abdullah bin Abdul Kadir]] (1795–1852), MAL
: [[Abe K&#333;b&#333;]] (1924–1993), JP
: [[Rebecca Abe]] (* 1967), D
9 : [[Sait Faik Abas&#305;yan&#305;k]] (1906–1954), TR
: [[Lynn Abbey]] (* 1948), US
: [[Jacob Abbott]] (1803–1879), US
: [[John Stevens Cabot Abbott]] (1805–1877), US
: [[Abdullah bin Abdul Kadir]] (1795–1852), MAL
: [[Abe K&#333;b&#333;]] (1924–1993), JP
: [[Rebecca Abe]] (* 1967), D
10 : [[Lynn Abbey]] (* 1948), US
: [[Jacob Abbott]] (1803–1879), US
: [[John Stevens Cabot Abbott]] (1805–1877), US
: [[Abdullah bin Abdul Kadir]] (1795–1852), MAL
: [[Abe K&#333;b&#333;]] (1924–1993), JP
: [[Rebecca Abe]] (* 1967), D
11 : [[Jacob Abbott]] (1803–1879), US
: [[John Stevens Cabot Abbott]] (1805–1877), US
: [[Abdullah bin Abdul Kadir]] (1795–1852), MAL
: [[Abe K&#333;b&#333;]] (1924–1993), JP
: [[Rebecca Abe]] (* 1967), D
12 : [[John Stevens Cabot Abbott]] (1805–1877), US
: [[Abdullah bin Abdul Kadir]] (1795–1852), MAL
: [[Abe K&#333;b&#333;]] (1924–1993), JP
: [[Rebecca Abe]] (* 1967), D
13 : [[Abdullah bin Abdul Kadir]] (1795–1852), MAL
: [[Abe K&#333;b&#333;]] (1924–1993), JP
: [[Rebecca Abe]] (* 1967), D
14 : [[Abe K&#333;b&#333;]] (1924–1993), JP
: [[Rebecca Abe]] (* 1967), D
15 , JP

Redeemer 9. Apr 2021 23:09

AW: Text aus einem Richedit kopieren
 
Warum RichEdit? Warum Text markieren?

Delphi.Narium 9. Apr 2021 23:23

AW: Text aus einem Richedit kopieren
 
Ehrlichgesagt hab' ich nicht verstanden, was Du genau haben möchtest. Sinngemäß sowas?
Code:
1 : [[Bertus Aafjes]] (1914–1993), NL
2 : [[Jeppe Aakjær]] (1866–1930), DK
3 : [[Johannes Aal]] (um 1500–1551), CH
4 : [[Hans Aanrud]] (1863–1953), NO
5 : [[Emil Aarestrup]] (1800–1856), DK
6 : [[Soazig Aaron]] (* 1949), FR
7 : [[Ivar Aasen]] (1813–1896), NO
nur hingedaddelt:
Delphi-Quellcode:
  x := 0;
  for i := 0 to RichEdit.Lines.Count - 1 do begin
    if Copy(RichEdit.Lines[i],1,4) = ': [[' then begin
      x := x + 1;
      Dummy_StringList.Add(Format('%d %s',[x,RichEdit.Lines[i]]);
    end;
  end;

NoGAD 9. Apr 2021 23:28

AW: Text aus einem Richedit kopieren
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1486804)
Ehrlichgesagt hab' ich nicht verstanden, was Du genau haben möchtest. Sinngemäß sowas?

Ja. Jedoch bin ich mir nicht sicher, ob das in Zukunft immer sco schön formatiert bleiben wird. Lieber würde ich den Text zwischen ": [[" und dem nächsten ": [[" kopieren. Nicht zeilenweise.

Zitat:

Zitat von Redeemer (Beitrag 1486802)
Warum RichEdit? Warum Text markieren?

Weil ich mir nicht besser zu helfen weiß.

LG Mathias :-)

Delphi.Narium 9. Apr 2021 23:54

AW: Text aus einem Richedit kopieren
 
Na dann nehmen wir halt den Text, aber das wird jetzt eher unübersichtlich:
Delphi-Quellcode:
var
  sText : String;
  sName : String;
  iPos1 : Integer;
  iPos2 : Integer;
  iPos3 : Integer;
  iNr  : Integer;
begin
  iNr := 0;
  // Zuerst holen uns wir den gesamten Text
  // und hängen noch 'nen "Trenner" dran,
  // damit wir den für den letzten Wert auch als Abschluss zu Verfügung haben.
  sText := RichEdit.Lines.Text + ': [[';
  // Solange da noch was drinne ist:
  while Length(sText) > 0 do begin
    // Position des momentan ersten "Trenners" ermitteln
    iPos1 := Pos(': [[',sText);
    // und den nächsten "Trenner" dahinter ermitteln.
    iPos2 := PosEx(': [[',sText,iPos1 + 4);
    // Die Namen ... sind zwischen iPos1 und iPos2 zu finden,
    sName := Trim(Copy(sText,iPos1,iPos2 - 1));
    // außer der Name enthält 'nen Zeilenumbruch,
    iPos3 := Pos(#13,sName);
    // dann müssen wir davor abschneiden.
    if iPos3 > 0 then sName := Trim(Copy(sName,1,iPos3 - 1));
    // Nächste Nummer
    iNr := iNr + 1;
    // und in die Ausgabeliste damit.
    Dummy_StringList.Add(Format('%d %s',[iNr,sName]);
    // Alles vor dem nächsten "Trenner" abschneiden
    sText := Copy(sText,iPos2,Length(sText);
    // und weiter geht's mit dem Nächsten.
  end;
end;
Achtung: Ungetestet, nur als Ansatz für 'ne Idee gedacht.

NoGAD 10. Apr 2021 01:17

AW: Text aus einem Richedit kopieren
 
Vielen Dank. Das funktioniert, wie ich es benötige.

Doch zurück zum Thema, warum funktioniert das nicht über FindText vom Richedit?

Delphi.Narium 10. Apr 2021 01:41

AW: Text aus einem Richedit kopieren
 
Das Ergebnis sieht so aus, als wäre in der Logik zu Bestimmung von StartPos, EndPos und irgendwie die Längenbestimmung für SelText nicht in Ordnung.

Bei der momentanen Logik wird wohl die StartPos in 'ner anderen Geschwindigkeit verändert, als EndPos und dadurch SelText immer länger.
Aber irgendwie blicke ich da nicht durch.

KodeZwerg 10. Apr 2021 02:06

AW: Text aus einem Richedit kopieren
 
vielleicht der klassiker, ein "with" fehler ?
schonmal aus post #1 probiert ohne "with" zu realisieren?
(habs nicht getestet, nur so ein gedanke...)

NoGAD 10. Apr 2021 02:44

AW: Text aus einem Richedit kopieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von KodeZwerg (Beitrag 1486812)
vielleicht der klassiker, ein "with" fehler ?
schonmal aus post #1 probiert ohne "with" zu realisieren?
(habs nicht getestet, nur so ein gedanke...)

Daran hatte ich noch nicht gedacht, aber das war auch nicht der Fehler.


Mittlerweile funktioniert es ja. Delphi.Narium hat mir mit seinem Code sehr geholfen.

Im Anhang meine Form, weshalb ich das überhaupt gemacht habe. Sollte jemand noch bessere Lösungen finden, lasst es uns bitte wissen :-)
Anmerkung: Es werden 3 Dateien benötigt, damit der Download von Wikipedia klappt: libeay32.dll, openssl.exe und ssleay32.dll
zu finden hier: http://docwiki.embarcadero.com/RADSt...ney/en/OpenSSL oder hier: https://www.openssl.org/source/

LG Mathias

shebang 13. Apr 2021 10:05

AW: Text aus einem Richedit kopieren
 
Zitat:

Zitat von NoGAD (Beitrag 1486814)
Sollte jemand noch bessere Lösungen finden, lasst es uns bitte wissen :-)

Das Beispiel schreit doch förmlich nach einer regular Expression:
Code:
(?<=\[\[).*(?=\]\])
Hier kannst du das Ganze mit deinen Daten testen.

NoGAD 13. Apr 2021 11:13

AW: Text aus einem Richedit kopieren
 
Zitat:

Zitat von shebang (Beitrag 1487024)
Zitat:

Zitat von NoGAD (Beitrag 1486814)
Sollte jemand noch bessere Lösungen finden, lasst es uns bitte wissen :-)

Das Beispiel schreit doch förmlich nach einer regular Expression:
Code:
(?<=\[\[).*(?=\]\])
Hier kannst du das Ganze mit deinen Daten testen.


Hallo shebang,

das war zwischenzeitlich tatsächlich auch eine Idee, der ich nachgehen wollte - jedoch aus Nichtwissen, wie Regular Expressions aufgebaut sind - wieder verworfen habe.

Regular Expressions sind einfach grauenhaft. Mir erschließt sich nicht im Ansatz, wie man sich an so einer Zeichenfolge erfreuen kann - und, wie man diese erstellt.
Und ja, ich habe viele Erklärungen gelesen - aber nicht verstanden. Das ist wie höhere Mathematik für einen normalen Drittklässler. Da kann man noch so viel versuchen zu erklären - es wird nichts helfen.

Übrigens, die RegExp, die Du mir gegeben hast, findet nur die Namen. Die Jahreszahlen müssten auch noch mit rein ;-)


LG Mathias.

himitsu 13. Apr 2021 12:27

AW: Text aus einem Richedit kopieren
 
Es gibt schöne Online-Tools, die geben eine detailierte Erklärung zur verwendeten RexExp, zusätzlich viele Hilfen
und vorallem eine Testumgebung.
z.B. regex101.com

Lookarounds sind für Viele auch bissl schwer zu verstehen.
Im Prinzip ist das eine Suche, die aber im Endergebnis nicht enthalten sein wird.
https://regex101.com/r/bVLk5d/1
Delphi-Quellcode:
(?<=\[\[).*(?=\]\])
sagt eigentlich nur
Delphi-Quellcode:
suche nach "[[" und "]]" und gib mir Alles dazwischen
.

Da du hier aber zwei Dinge finden willst, ist das eh unnötig kompliziert und garnicht nutzbar. (denn der Teil zwischen den beiden Suchstückchen kann/muß ja im Match drin sein)
https://regex101.com/r/Y3lNbp/1
Delphi-Quellcode:
\[\[(.*)\]\] \((.*)\)

Suche nach "[[" , "]] (" und ")" nimm das dazwischen mit und gib mir das, was innerhalb der Gruppen (...) steht.
Hier steht das Ergebnis dann zwar nicht direkt im "Match"-String drin, aber in den Groups kannst du alles finden.

KodeZwerg 13. Apr 2021 13:04

AW: Text aus einem Richedit kopieren
 
@NoGAD:
kannst du bitte nochmal "exakt" beschreiben was das resultat sein sollte?

wenn ich post #1 lese kommt bei mir im endeffekt raus das du eine zeile kopiert haben möchtest aber es sind doch bereits zeilen? (von ": [[" bis ": [[")

also gebe mal ein konkreteres beispiel wie der input aussieht und wie du dir vorstellst das der output aussehen soll. (verweise nicht auf externe quellen sondern copy/paste etwas hier rein)

oder geht es wieder darum code zu reparieren anstelle eine eigenentwicklung vorzustellen?
(ich würde TMemo oder TStringList nehmen, einfacher in der Handhabung)

Delphi.Narium 13. Apr 2021 13:18

AW: Text aus einem Richedit kopieren
 
In einem String kommt n-mal :[[ vor.

Je Vorkommen von :[[ soll alles von :[[ bis vor dem nächsten :[[ als separate Zeichenfolge ausgegeben werden.

aus z. B.
Code:
:[[a]]:[[xyz irgendwas mehr oder weniger langes]] :[[b]]:[[noch mehr
]]:[[und nochwas]]
mache
Code:
:[[a]]
:[[xyz irgendwas mehr oder weniger langes]]
:[[b]]
:[[noch mehr]]
:[[und nochwas]]

himitsu 13. Apr 2021 13:35

AW: Text aus einem Richedit kopieren
 
Wenn alle/viele Matches in einer Zeile vorkommen, dann muß man noch etwas am MultiLine und Gready rumspielen.
* Gready nimmt standardmäßig so viel wie möglich, vom ersten Anfang, bis zum letzten Ende (Ungready: von einem Anfang bis zum nächsten Ende)
* und "." stoppt oftmals standardmäßig an Zeilenumbrüchen (drum war Gready hier egal, da es pro Zeile nur einen Anfang und ein Ende gab)

KodeZwerg 13. Apr 2021 13:41

AW: Text aus einem Richedit kopieren
 
@Delphi.Narium:
Sehr gut formuliert, damit konnte ich was anfangen.

Das kam bei mir raus. Erfüllt es die Anforderungen?
Delphi-Quellcode:
program Project13;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.Classes;

{
input:
:[[a]]:[[xyz irgendwas mehr oder weniger langes]] :[[b]]:[[noch mehr
]]:[[und nochwas]]

output:
:[[a]]
:[[xyz irgendwas mehr oder weniger langes]]
:[[b]]
:[[noch mehr]]
:[[und nochwas]]
}


var
  input: TStringList;
  output: TArray<string>;
  cArr: array[0..0] of string;
  i: Integer;
  derText: string;
begin
  try
    {wandel input in einen langen string um}
    input := TStringList.Create;
    input.Add(':[[a]]:[[xyz irgendwas mehr oder weniger langes]] :[[b]]:[[noch mehr');
    input.Add(']]:[[und nochwas]]');
    for I := 0 to input.Count - 1 do
      derText := derText + Input[i];
    input.Free;

    {splitte string wieder}
    cArr[0] := ':[[';
    output := derText.Split(cArr);
    for i := 1 to High(output) do
      output[i] := ':[[' + output[i];

    {schreibe resultat}
    for i := Low(output) to High(output) do
      WriteLn(output[i]);
    ReadLn;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

himitsu 13. Apr 2021 13:52

AW: Text aus einem Richedit kopieren
 
https://regex101.com/r/jFCkIV/1 (Gready + MultiLine)
https://regex101.com/r/jFCkIV/2 (Ungready ohne MultiLine)
https://regex101.com/r/jFCkIV/3 (Ungready + SingleLine)

NoGAD 13. Apr 2021 15:03

AW: Text aus einem Richedit kopieren
 
Hallo ihr Lieben!


Seid mir bitte nicht böse, aber Reguläre Ausdrücke verstehe ich einfach nicht. Das ist mir zu kompliziert, zu abstrakt.
Nebenbei: 3 verschiedene Versionen von RegExp? ::roll::
Außerdem ist es hier für mein aktuelles Anliegen nicht nutzbar, wie ich meine.

Zitat:

Zitat von KodeZwerg (Beitrag 1487050)
@Delphi.Narium:
Sehr gut formuliert, damit konnte ich was anfangen.
Das kam bei mir raus. Erfüllt es die Anforderungen?

Leider nicht. Es fehlt eine Abfrage, ob der String überhaupt genutzt werden soll.

Das ist ein Ausschnitt des Textes, welchen ich versuche zu parsen: (HTML-Quellcode von https://de.wikipedia.org/w/index.php.../A&action=edit )

Code:
<!DOCTYPE html>
<html class="client-nojs" lang="de" dir="ltr">
<head>
<meta charset="UTF-8"/>


[COLOR="Yellow"]{ Schnipp Schnapp, hier habe ich viel HTML gelöscht }[/COLOR]


id="wpScrolltop" type="hidden" name="wpScrolltop"/><input type="hidden" value="d41d8cd98f00b204e9800998ecf8427e" name="wpAutoSummary"/><input type="hidden" value="0" name="oldid"/><input type="hidden" value="210416705" name="parentRevId"/><input type="hidden" value="text/x-wiki" name="format"/><input type="hidden" value="wikitext" name="model"/><textarea aria-label="Wikitext-Editor" tabindex="1" accesskey="," id="wpTextbox1" cols="80" rows="25" style="" class="mw-editfont-monospace" lang="de" dir="ltr" name="wpTextbox1">__NOTOC__

{{SubTOC|Titel=Liste von Autoren|Index=Liste von Autoren}}


[COLOR="Red"]{ Ab hier besteht mein Interesse, alle Angaben heraus zu filtern }[/COLOR]
[COLOR="red"]{ Ich benötige dazu die Namen, Die Jahresangaben und das Land (Alle Werte, soweit verfügbar)}[/COLOR]


== Aa ==
: [[Bertus Aafjes]] (1914&#8211;1993), NL
: [[Jeppe Aakjær]] (1866&#8211;1930), DK
: [[Johannes Aal]] (um 1500&#8211;1551), CH
: [[Hans Aanrud]] (1863&#8211;1953), NO
: [[Emil Aarestrup]] (1800&#8211;1856), DK
: [[Soazig Aaron]] (* 1949), FR
: [[Ivar Aasen]] (1813&#8211;1896), NO

== Ab ==
: [[Petrus Abaelardus]] (1079&#8211;1142), FR

{[.. ff ..]}
Im Weiteren Verlauf parse ich dann diesen Text, um ein Array zu bilden, um dann dies zu bekommen:

Delphi-Quellcode:
  Authors_German: array [1 .. 3711, 1 .. 3] of string = (
    (('Bertus Aafjes'), ('1914&#8211;1993'), ('NL')),
    (('Jeppe Aakjær'), ('1866&#8211;1930'), ('DK')),
    (('Johannes Aal'), ('um 1500&#8211;1551'), ('CH')),
    (('Hans Aanrud'), ('1863&#8211;1953'), ('NO')),
    (('Emil Aarestrup'), ('1800&#8211;1856'), ('DK')),
    (('Soazig Aaron'), ('1949'), ('FR')),
    (('Ivar Aasen'), ('1813&#8211;1896'), ('NO')),
    (('Petrus Abaelardus'), ('1079&#8211;1142'), ('FR')),

[COLOR="Yellow"]{ Schnipp Schnapp }[/COLOR]


Und nochmal der Hinweis: Es funktioniert ja inzwischen, Dank der Hilfe von Delphi.Narium.

Der Code für das Kopieren der Namen ist folgende funtion:

Delphi-Quellcode:
function TForm6.SearchForText(sText: String; SearchTextA, SearchTextB: string; var Dummy_StringList: TStringList): boolean;
var
  sName: String;
  iPos1: Integer;
  iPos2: Integer;
  iPos3: Integer;
begin
  { -- THX@Delphi.Narium und KodeZwerg https://www.delphipraxis.net/1486806-post5.html -- }
  if (Pos(SearchTextA, sText) = 0) or (Pos(SearchTextB, sText) = 0) then
    exit;
  sText := sText + SearchTextB;
  Dummy_StringList.Clear;
  try
    while (sText.Length > 0) and (sText <> SearchTextB) do
    begin
      iPos1 := Pos(SearchTextA, sText);
      iPos2 := Pos(SearchTextB, sText, iPos1 + Length(SearchTextA));
      sName := Trim(Copy(sText, iPos1, iPos2 - 1));
      iPos3 := Pos(slinebreak, sName);
      if iPos3 > 0 then
        sName := Trim(Copy(sName, 1, iPos3 - 1));
      if (sName.Length > 0) and (sName <> SearchTextA) and (sName <> SearchTextB) then
        Dummy_StringList.Add(sName);
      sText := Copy(sText, iPos2, Length(sText));
    end;
  finally
    result := true;
  end;
end;

// Aufruf der Function:

var
  Dummy_StringList: TStringList;
  Dummy_String: String;
begin

  RichEdit2.Clear;
  Dummy_StringList := TStringList.Create;

  Dummy_String := RichEdit1.Text;
  if SearchForText(Dummy_String, Author_From, Author_From, Dummy_StringList) then
    RichEdit2.Lines.AddStrings(Dummy_StringList);

  Dummy_StringList.Free;

end;

LG Mathias :-)

KodeZwerg 13. Apr 2021 15:14

AW: Text aus einem Richedit kopieren
 
Zitat:

Zitat von NoGAD (Beitrag 1487062)
Zitat:

Zitat von KodeZwerg (Beitrag 1487050)
@Delphi.Narium:
Sehr gut formuliert, damit konnte ich was anfangen.
Das kam bei mir raus. Erfüllt es die Anforderungen?

1. Leider nicht. Es fehlt eine Abfrage, ob der String überhaupt genutzt werden soll.
2. Und nochmal der Hinweis: Es funktioniert ja inzwischen, Dank der Hilfe von Delphi.Narium.

1. ich habe etwas erstellt was Delphi.Narium als aufgabe formulierte da ich mit deinem text nicht klar kam.
2. das klingt super, dann ist das thema ja durch und man braucht sich keine weiteren gedanken mehr machen :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 Uhr.

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