AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String in Memo suchen

Ein Thema von Kratos · begonnen am 16. Okt 2019 · letzter Beitrag vom 21. Okt 2019
Antwort Antwort
Seite 1 von 3  1 23      
Kratos

Registriert seit: 15. Okt 2019
52 Beiträge
 
Delphi 10.3 Rio
 
#1

String in Memo suchen

  Alt 16. Okt 2019, 10:59
Delphi-Version: 10.2 Tokyo
Hallo miteinander,

Programmaufbau:

Code:
Form5 -> Memo5(TMemo), Button5(TButton)
Form6 -> Memo6(TMemo), Button6(TButton)
Meine Idee:
Das Form6.Memo6 wird zeilenweise mit Strings gefüllt.
Durch Klick auf Button6 wird der Inhalt von Memo6 nach Memo5 übertragen.
---- Bis hierhin klappt alles.

Nun soll beim Klick auf Button5 das Memo5 nach einem String durchsucht werden, verbunden durch eine Abfrage. Heißt: Wenn der String gefunden wurde, dann führe etwas aus.
Code:
procedure TForm5.Button5Click(Sender: TObject);
begin
   if ((Pos('blablabla', Memo5.Lines)) := True) then
   begin
      TuEtwas;
   end;
end;
Folgender Fehler erscheint:
E2250 Es gibt keine überladene Version von 'Pos', die man mit diesen Argumenten aufrufen kann Wenn ich die if-Zeile durch folgende ersetze, klappt es auch nicht:
if (Memo5.Lines.IndexOf('blablabla') = True) then Fehler:
E2008 Inkompatible Typen
Was mache ich falsch? Hat jemand einen Denkanstoß für mich parat?

Gruß
Kratos
  Mit Zitat antworten Zitat
pesi

Registriert seit: 29. Aug 2003
Ort: 36217 Ronshausen
117 Beiträge
 
Delphi XE5 Professional
 
#2

AW: String in Memo suchen

  Alt 16. Okt 2019, 11:06
Versuche es mal damit...

if Pos('blablabla', Memo5.text) <> 0 then

Geändert von pesi (16. Okt 2019 um 11:10 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: String in Memo suchen

  Alt 16. Okt 2019, 11:06
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
   if Memo1.Lines.Text.Contains('Derp') then
      ShowMessage('Derp');
end;
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: String in Memo suchen

  Alt 16. Okt 2019, 11:06
Hallo,

pos liefert einen Index (Integer) zurück, keinen Boolean.
Memo5.Text sollte im ersten Beispiel funktionieren.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Kratos

Registriert seit: 15. Okt 2019
52 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: String in Memo suchen

  Alt 16. Okt 2019, 11:17
Vielen Dank Leute für die sauschnellen Antworten! Ihr seid super!

@Klaus01
Danke für deine Erklärung.
Ich hab die Verbesserung von @ pesi getestet. Funktioniert wunderbar!

Gruß
Kratos

EDIT: Hab eben auch noch das Bsp von @Der schöne Günther getestet. Klappt auch einwandfrei :*

Geändert von Kratos (16. Okt 2019 um 11:22 Uhr)
  Mit Zitat antworten Zitat
Kratos

Registriert seit: 15. Okt 2019
52 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: String in Memo suchen

  Alt 16. Okt 2019, 16:56
Hi Leute,

ich nochmal. Ich hab eure Verbesserungsvorschläge umgesetzt und noch zwei Verzweigungen drumgebaut. Aber da taucht wieder ein Problem auf, welches ich nicht gelöst bekomme.

Programmaufbau:
Code:
Form6 -> ListBox6, Memo6
Form7 ...
ListBox6 und Memo6 sind nebeneinander platziert und beide sind sichtbar. In ListBox6 sind 6 Items abgespeichert. Per Doppelklick auf ein Item soll dieses in Memo6 geschrieben werden.

Meine Idee:

Es soll jedes mal überprüft werden, ob das doppelgeklickte Item aus ListBox6 bereits in Memo6 vorhanden ist.

Wenn Nein, soll es in Memo6 geschrieben werden.
Wenn Ja, soll es NICHT in Memo6 geschrieben werden.
Wird das 5. Item doppelgeklickt, geht Form7 auf (das klappt).

Code:
procedure TForm6.ListBox6DblClick(Sender: TObject);
var
  i: Integer;
begin
  if (ListBox6.ItemIndex) = 5 then  
    begin
      with TForm7.Create(Self) do
        try
          ShowModal;
      finally
          Free;
      end;
    end
  else if Pos(ListBox6.Items.Text, Memo6.Lines.Text) <> 0 then
    begin
       Memo6.Lines.Add(ListBox6.Items[ListBox6.ItemIndex] + #10#13);
    end
    else
      begin
        for i := 0 to ListBox6.Items.Count - 1 do
         if (Memo6.Lines.Text.IndexOf(ListBox6.Items[i]) < 0) then
         begin
            Memo6.Lines.Delete(i);    
         end;
   
      end;

Ich kann mir gut vorstellen, dass diese Zeile falsch ist:
 else if Pos(ListBox6.Items.Text, Memo6.Lines.Text) <> 0 then Es kommt keine Fehlermeldung. Jedoch kann man die Items aus ListBox6 doppelklicken wie man will, es passiert nichts.
Könnt ihr mir helfen auf einen Lösungsansatz zu kommen, bitte?
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#7

AW: String in Memo suchen

  Alt 16. Okt 2019, 17:02
Du willst nicht den kompletten Inhalt der Listbox im Memo suchen sondern nur den markierten String. So müsste es tun (ungetestet):
Delphi-Quellcode:
else if Pos(ListBox6.Items[ListBox6.ItemIndex], Memo6.Lines.Text) <> 0 then begin
...
end ...
PS: Bitte benenne deine Controls sauber! Keiner weiß, was ListBox6 und Memo6 ist, und selbst du wirst das in ein paar Wochen nicht mehr wissen.

Grüße
Dalai
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
763 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: String in Memo suchen

  Alt 16. Okt 2019, 17:34
So könntest du checken, ob das Element aus Liste bereits im Memo vorhanden ist:

Delphi-Quellcode:
 lbel := Listbox1.Items[ListBox1.ItemIndex];

 if pos( #13#10 + lbel + #13#10, #13#10 + memo1.Text ) = 0 then
   Memo1.Lines.Add( lbel );

Bei Dalais Lösung würde zum Beispiel das Element "Anna" nicht zu Memo hinzugefügt werden, wenn "Annabelle" bereits im Memo vorhanden wäre.

Eventuell lohnt sich für dich auch ein Blick auf TStringList und die Eigenschaft Duplicates.
Michael Gasser
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#9

AW: String in Memo suchen

  Alt 16. Okt 2019, 18:48
Na dann lieber gleich ein Memo.Lines.IndexOf, wie es schon ein paar Zeilen weiter unten (in der for-Schleife) steht. Verstehe sowieso nicht, warum einmal mit Pos und einmal mit IndexOf gesucht/verglichen wird.

Delphi-Quellcode:
if (Memo6.Lines.IndexOf(ListBox6.Items[ListBox6.ItemIndex]) < 0) then
...
Je nachdem, ob case-sensitiv oder -insensitiv gesucht werden soll, kann man ja noch ein UpperCase/LowerCase mit reinbringen.

Grüße
Dalai
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
763 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: String in Memo suchen

  Alt 16. Okt 2019, 19:05
Ja klar Dalai - mach ich ja sonst auch so... es wäre gut, wenn man einer Meldung ein ttl (zum Beispiel 0) mitgeben könnte .
Michael Gasser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 01:45 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