Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi edit Feld auf ein bestimmtes Wort untersuchen (https://www.delphipraxis.net/166741-edit-feld-auf-ein-bestimmtes-wort-untersuchen.html)

newmusicslamer 27. Feb 2012 18:55

Delphi-Version: 7

edit Feld auf ein bestimmtes Wort untersuchen
 
Hallo,

ich bin mir nicht ganz sicher ob das hier hingehört, da ich neu bin.
Mein Problem ist folgendes ich würde gerne ein edit Feld auf ein bestimmtes Wort in einem ganzen Satz z.Bsp. 'Weil Kakao und Baum' untersuchen, d.h.
ungefähr in der Form:
Code:
if edit1.text with = 'Weil' , 'Und' then label1.caption := 'Sehr Gut!' ;
jetzt nur als Beispiel.

Ich hoffe ihr könnt mir helfen.
newmusicslamer

Popov 27. Feb 2012 19:02

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Fast richtig:

Delphi-Quellcode:
if edit1.text = 'Weil' then label1.caption := 'Sehr Gut!' ;
Wenn nicht, dann bitte etwas konkreter werden.

newmusicslamer 27. Feb 2012 19:07

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Ok, ich habe verstanden ich muss etwas genauer schreiben.

Danke an Popov für deine schnelle Antwort, aber ich meine, dass Der Text im edit Feld z.Bsp. 'Weil Kakao Und Baum' heißt und dann erkennt er dass Weil un Und enthalten sind und reagiert dann.

vagtler 27. Feb 2012 19:22

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Das sind absolute Grundlagen. Du kannst Bedingungen natürlich miteinander verknüpfen:

Code:
if (Bedingung1) and (Bedingung2) then ...
Ob ein Text in einem anderen enthalten ist kannst Du z.B. mit der Funktion
Code:
MatchText()
feststellen.

Popov 27. Feb 2012 19:40

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Wobei ich dir für den Vergleich von Texten SameText(Text1, Text2) empfehlen würde. Denn das normale

Delphi-Quellcode:
if 'Text' = 'Text' then ...
klappt zwar, aber

Delphi-Quellcode:
if 'Text' = 'text' then ...
würde nicht klappen. SameText beachten Groß- und Kleinschreibung nicht. Also

Delphi-Quellcode:
if SameText('Text', 'text') then
Oder in deinem Fall

Delphi-Quellcode:
if SameText(edit1.text, 'Weil') and SameText(edit1.text, 'Und') then label1.caption := 'Sehr Gut!' ;

Popov 27. Feb 2012 19:41

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Zitat:

Zitat von vagtler (Beitrag 1153244)
Ob ein Text in einem anderen enthalten ist kannst Du z.B. mit der Funktion
Code:
MatchText()
feststellen.

Ist in Delphi 7 wohl nicht enthalten.

vagtler 27. Feb 2012 19:48

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Zitat:

Zitat von Popov (Beitrag 1153246)
[...] Ist in Delphi 7 wohl nicht enthalten.

Korrekt. Das habe ich (mal wieder) überlesen.

Mal ganz abgesehen davon, dass ich das gar nicht meinte. Ich meinte
Delphi-Quellcode:
ContainsText()
, aber das wird dann wahrscheinlich auch nicht in Delphi 7 enthalten sein.

Da wird der Threadersteller dann wohl mit
Delphi-Quellcode:
Pos()
arbeiten müssen, denn

Zitat:

Delphi-Quellcode:
if SameText(edit1.text, 'Weil') and SameText(edit1.text, 'Und') then label1.caption := 'Sehr Gut!' ;

wird niemals erfüllt sein können... ;)

silver-moon-2000 27. Feb 2012 19:49

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Zitat:

Zitat von Popov (Beitrag 1153245)
Delphi-Quellcode:
if SameText(edit1.text, 'Weil') and SameText(edit1.text, 'Und') then label1.caption := 'Sehr Gut!' ;

Hier widerspreche ich Dir einfach mal, denn das würde nie funktionieren. SameText untersucht ja den gesamten String und nicht einen Teilstring.
Delphi-Quellcode:
if (edit1.text = 'Weil') and (edit1.text = 'Und')...
ist ja identisch (bis auf Groß/Kleinschreibung) und das liefert auch immer False.

Zitat:

Zitat von Delphi OH
Compares two strings by ordinal value without case sensitivity.

SameText compares S1 and S2 and returns True if they are equal.

Du meinst vielleicht eher
Delphi-Quellcode:
ContainsText
oder
Delphi-Quellcode:
ContainsStr
?

[edit]roter kasten, where art thou?

Popov 27. Feb 2012 19:58

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Ok, ich hab den einen Satz mit dem Im-Satz überlesen.

Sorry, hier also eine Funktion die funktionieren wird:

Delphi-Quellcode:
function ContainsText2(SubText, Text: String): Boolean;
begin
  Result := Pos(AnsiUpperCase(SubText), AnsiUpperCase(Text)) > 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ContainsText2('weil', Edit1.Text) and ContainsText2('und', Edit1.Text) then
    Caption := 'Gut';
end;

newmusicslamer 28. Feb 2012 15:13

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Danke, Leute für eure Hilfe der Beitrag von Popov hat mir schließlich geholfen. Damit ist mein Problem gelöst!

*geschlossen*

DeddyH 28. Feb 2012 15:15

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Du solltest die Funktionsparameter noch als const deklarieren, das dürfte effizienter sein.

newmusicslamer 28. Feb 2012 15:18

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
@DeddyH Tschuldigung aber ich bin anfänger im programmieren. Wie meinst du das?

DeddyH 28. Feb 2012 15:19

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Delphi-Quellcode:
function ContainsText2(const SubText, Text: String): Boolean; //Konstantenparameter
begin
  Result := Pos(AnsiUpperCase(SubText), AnsiUpperCase(Text)) > 0;
end;

himitsu 28. Feb 2012 15:19

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Wobei man aufpassen muß.
Diese Wort-Suche bezieht sich in ContainsText2 nicht auf ein ganzes Wort, sondern auf Textteile.

Weilheimer Hunde



@DeddyH: Das sind so um die 6 winzige Assemblerbefehler (INC, DEC und JZ/JNZ), da laß ich das const auch gerne mal weg, wenn dann der Code kürzer/übersichtlicher wird.

DeddyH 28. Feb 2012 15:24

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Das Wörtchen const macht aber den Code doch nicht unübersichtlicher :gruebel:

newmusicslamer 28. Feb 2012 15:26

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
@DeddyH OK ich danke dir!
@himitsu dass ist in Ordnung das Stört mich nicht!

himitsu 28. Feb 2012 15:30

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Zitat:

Zitat von DeddyH (Beitrag 1153452)
Das Wörtchen const macht aber den Code doch nicht unübersichtlicher :gruebel:

OK, in einer größeren Klassendeklaration kann die Zeile schonmal länger werden,
wobei das fette Schwarz auch schonmal ablenken kann. :stupid:

DeddyH 28. Feb 2012 15:31

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Ja nee is klar :stupid:

Gustav.R 28. Feb 2012 15:43

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Zitat:

Zitat von DeddyH (Beitrag 1153445)
Du solltest die Funktionsparameter noch als const deklarieren, das dürfte effizienter sein.

Ernstgemeinte Zwischenfrage, weshalb wird es dadurch effizienter :oops:

Dankeschön :oops:

GG

DeddyH 28. Feb 2012 15:48

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Ohne sonstige Angaben ist es ein Call By Value, d.h. es wird eine Kopie des Strings erstellt und übergeben. Mit einer Angabe (const, var, out) ist es ein Call By Reference, d.h. intern wird ein Zeiger auf die Originaldaten übergeben, ohne erst eine Kopie anlegen zu müssen.

newmusicslamer 28. Feb 2012 17:51

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
@DeddyH Da ich ja so wissbegierig bin. Hätte ich eine Frage, und die wäre ob du das nochmal für Anfänger ausdrücken könntest?

DeddyH 28. Feb 2012 17:53

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Das hab ich hier schonmal versucht :roll:

Gustav.R 28. Feb 2012 18:07

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Zitat:

Zitat von DeddyH (Beitrag 1153498)
Das hab ich hier schonmal versucht :roll:

Vielen Dank für den Link, aber den Link von Dir zu http://www.detlef-heibing.de/program...arametern.html habe ich bisher wirklich noch nie in der DP gesehen :!:

Danke:thumb:

GG

DeddyH 28. Feb 2012 18:11

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Kein Wunder, die Seite ist ja immer noch Baustelle ;)

himitsu 28. Feb 2012 18:42

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Zitat:

Zitat von DeddyH (Beitrag 1153468)
Ohne sonstige Angaben ist es ein Call By Value, d.h. es wird eine Kopie des Strings erstellt und übergeben. Mit einer Angabe (const, var, out) ist es ein Call By Reference, d.h. intern wird ein Zeiger auf die Originaldaten übergeben, ohne erst eine Kopie anlegen zu müssen.

Wobei Strings, dynamische Arrays und Interfaces über eine Referenzzählung verfügen, so daß dort nicht gleich "alles" umkopiert wird.

Auch bei nativen Typen unter SizeOf(Pointer), gibt const keinerlei Vorteile, also in Win32 bis 32 Bit, wie z.B. Byte, Integer, Pointer, Char usw.

Gustav.R 28. Feb 2012 19:10

AW: edit Feld auf ein bestimmtes Wort untersuchen
 
Zitat:

Zitat von himitsu (Beitrag 1153511)
Zitat:

Zitat von DeddyH (Beitrag 1153468)
Ohne sonstige Angaben ist es ein Call By Value, d.h. es wird eine Kopie des Strings erstellt und übergeben. Mit einer Angabe (const, var, out) ist es ein Call By Reference, d.h. intern wird ein Zeiger auf die Originaldaten übergeben, ohne erst eine Kopie anlegen zu müssen.

Wobei Strings, dynamische Arrays und Interfaces über eine Referenzzählung verfügen, so daß dort nicht gleich "alles" umkopiert wird.

Auch bei nativen Typen unter SizeOf(Pointer), gibt const keinerlei Vorteile, also in Win32 bis 32 Bit, wie z.B. Byte, Integer, Pointer, Char usw.

Danke für die Verwässerung/Relativierung der Aussage von DeddyH (für Normalsterbliche) :pale:

Einen Fleißpunktaufkleber von mir dafür in Dein Sammelheftchen :twisted:

GG


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:53 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