![]() |
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:
Im Grunde möchte ich ja den Text zwischen ': [[' und ': [[' kopieren. Heraus kommt aber leider:
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;
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ıyanı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ıyanı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ıyanı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ı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 A 8 : [[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 9 : [[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 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ōbō]] (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ōbō]] (1924–1993), JP : [[Rebecca Abe]] (* 1967), D 12 : [[John Stevens Cabot Abbott]] (1805–1877), US : [[Abdullah bin Abdul Kadir]] (1795–1852), MAL : [[Abe Kōbō]] (1924–1993), JP : [[Rebecca Abe]] (* 1967), D 13 : [[Abdullah bin Abdul Kadir]] (1795–1852), MAL : [[Abe Kōbō]] (1924–1993), JP : [[Rebecca Abe]] (* 1967), D 14 : [[Abe Kōbō]] (1924–1993), JP : [[Rebecca Abe]] (* 1967), D 15 , JP |
AW: Text aus einem Richedit kopieren
Warum RichEdit? Warum Text markieren?
|
AW: Text aus einem Richedit kopieren
Ehrlichgesagt hab' ich nicht verstanden, was Du genau haben möchtest. Sinngemäß sowas?
Code:
nur hingedaddelt:
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
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; |
AW: Text aus einem Richedit kopieren
Zitat:
Zitat:
LG Mathias :-) |
AW: Text aus einem Richedit kopieren
Na dann nehmen wir halt den Text, aber das wird jetzt eher unübersichtlich:
Delphi-Quellcode:
Achtung: Ungetestet, nur als Ansatz für 'ne Idee gedacht.
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; |
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? |
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. |
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...) |
AW: Text aus einem Richedit kopieren
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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: ![]() ![]() LG Mathias |
AW: Text aus einem Richedit kopieren
Zitat:
Code:
(?<=\[\[).*(?=\]\])
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 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