AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Text aus einem Richedit kopieren

Offene Frage von "KodeZwerg"
Ein Thema von NoGAD · begonnen am 9. Apr 2021 · letzter Beitrag vom 13. Apr 2021
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
325 Beiträge
 
Delphi 10.4 Sydney
 
#1

Text aus einem Richedit kopieren

  Alt 9. Apr 2021, 22:56
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
Mathias
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.015 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Text aus einem Richedit kopieren

  Alt 9. Apr 2021, 23:09
Warum RichEdit? Warum Text markieren?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#3

AW: Text aus einem Richedit kopieren

  Alt 9. Apr 2021, 23:23
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;
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
325 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Text aus einem Richedit kopieren

  Alt 9. Apr 2021, 23:28
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.

Warum RichEdit? Warum Text markieren?
Weil ich mir nicht besser zu helfen weiß.

LG Mathias
Mathias
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#5

AW: Text aus einem Richedit kopieren

  Alt 9. Apr 2021, 23:54
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.
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
325 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Text aus einem Richedit kopieren

  Alt 10. Apr 2021, 01:17
Vielen Dank. Das funktioniert, wie ich es benötige.

Doch zurück zum Thema, warum funktioniert das nicht über FindText vom Richedit?
Mathias
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#7

AW: Text aus einem Richedit kopieren

  Alt 10. Apr 2021, 01:41
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.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Text aus einem Richedit kopieren

  Alt 10. Apr 2021, 02:06
vielleicht der klassiker, ein "with" fehler ?
schonmal aus post #1 probiert ohne "with" zu realisieren?
(habs nicht getestet, nur so ein gedanke...)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
325 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Text aus einem Richedit kopieren

  Alt 10. Apr 2021, 02:44
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
Angehängte Dateien
Dateityp: zip Unit_ImportFromWWW.zip (3,8 KB, 6x aufgerufen)
Mathias

Geändert von NoGAD (10. Apr 2021 um 03:03 Uhr) Grund: Nachtrag SSL
  Mit Zitat antworten Zitat
shebang
Online

Registriert seit: 7. Feb 2020
96 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Text aus einem Richedit kopieren

  Alt 13. Apr 2021, 10:05
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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