Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Vokal ersetzen (https://www.delphipraxis.net/167676-vokal-ersetzen.html)

Axl 12. Apr 2012 12:10

Vokal ersetzen
 
Hallo,

ich habe ein Problem.
Ich bin zwar erst neu hier, doch ich hoffe ihr könnt mir helfen.

Ich soll alle Vokale eines Textes den ich zuvor geöffnet habe, durch einen anderen Vokal ersetzen, den ich in einem Editfeld eingebe.
Das Hochladen des Textes (in Listbox) habe ich schon.
Ich weis nur nicht wie ich die Vokal (muss nur die in der 1. Zeile ändern) ändere.

Kann mir jemand helfen?

DeddyH 12. Apr 2012 12:12

AW: Vokal ersetzen
 
Hallo und Willkommen in der DP :dp:,

langsame, dafür einfache Möglichkeit: jeden Vokal mit Delphi-Referenz durchsuchenStringReplace ersetzen. Ansonsten kann man sich da mit einer Schleife schnell selbst was basteln.

Bummi 12. Apr 2012 12:16

AW: Vokal ersetzen
 
Delphi-Quellcode:
 Listbox1.Items[0] := StringReplace(Listbox1.Items[0], WasAuchImmer,Edit1.Text,[rfReplaceAll]);
gegf. wegen Großkeinschreibung 2 mal mit doppeltem UpperCase

Axl 12. Apr 2012 12:37

AW: Vokal ersetzen
 
Mit einer Schleife habe ich es auch schon versucht doch die funktioniert nicht richtig.
Ich wollte es mit IF A,E,I,O,U und in klein geschrieben halt machen.
Wie kann ich jetzt das Editfeld einbauen?

Mein Quelltext:
v soll der eingegebene Vokal sein.

FOR z:=1 TO LENGTH(txt[z]) DO
IF (txt[z]= 'a')or (txt[z]= 'e')or (txt[z]= 'i') or (txt[z]= 'o') or (txt[z]= 'u')
or (txt[z]= 'A') or (txt[z]= 'E') or (txt[z]= 'I') or (txt[z]= 'O') or (txt[z]= 'U')
THEN txt[z]:=v;

DeddyH 12. Apr 2012 12:43

AW: Vokal ersetzen
 
Gar nicht. Du willst ja nicht das Edit ändern, sondern den String, der da drin steht. Schreib Dir also eine Funktion, wo ein String reinkommt, bearbeitet wird und als Result zurückgegeben wird. Z.B.:
Delphi-Quellcode:
function ReplaceChar(const s: string; Old, New: Char): string;
begin
  Result := StringReplace(s, Old, New, [rfReplaceAll]);
end;
Das ist zwar weder schön noch schnell, sollte aber funktionieren.

[edit] Achja, aufrufen könntest Du das dann so:
Delphi-Quellcode:
Edit1.Text := ReplaceChar(Edit1.Text, 'a', 'u');
[/edit]

Bummi 12. Apr 2012 12:48

AW: Vokal ersetzen
 
Delphi-Quellcode:
var
 rep:String;
begin
 rep := 'ö';
 Listbox1.Items[0] :=
         StringReplace(
         StringReplace(Listbox1.Items[0], AnsiLowerCase(rep) ,AnsiLowerCase(Edit1.Text),[rfReplaceAll])
         , AnsiUpperCase(rep) ,AnsiUpperCase(Edit1.Text),[rfReplaceAll])
end;

Axl 12. Apr 2012 12:53

AW: Vokal ersetzen
 
Ich will ja nur in ein Editfeld zu Beispiel u eingeben. In der Listbox sollten dann alle Vokale durch das u ersetzt werden.

Bummi 12. Apr 2012 13:00

AW: Vokal ersetzen
 
Sorry, ich hatte übersehen daß es um alle Vokale geht
Delphi-Quellcode:
Function ReplaceAllVocals(const s:String;New:Char):String;
var
 i:Integer;
begin
    Result := s;
    For i := 1 to Length(s) do
      case s[i] of
         'a','e','u','i','o','ü','ö','ä':Result[i] := AnsiLowerCase(New)[1];
         'A','E','U','I','O','Ü','Ö','Ä':Result[i] := AnsiUpperCase(New)[1];
      end;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
    Showmessage(ReplaceAllVocals('Was Auch immer hier stehen könnte','o'));
end;

DeddyH 12. Apr 2012 13:01

AW: Vokal ersetzen
 
Dann übergib die entprechenden Eigenschaften als Parameter an die Funktion.

p80286 12. Apr 2012 13:06

AW: Vokal ersetzen
 
Delphi-Quellcode:
FOR z:=1 TO LENGTH(txt) DO
IF (txt[z]= 'a')or (txt[z]= 'e')or (txt[z]= 'i') or (txt[z]= 'o') or (txt[z]= 'u')
 or (txt[z]= 'A') or (txt[z]= 'E') or (txt[z]= 'I') or (txt[z]= 'O') or (txt[z]= 'U')
THEN txt[z]:=v;
so sollte es klappen.

Gruß
K-H

Axl 12. Apr 2012 13:12

AW: Vokal ersetzen
 
Und wie wäre das dann mit einer Prozedur. Wir sollen es damit machen. Was ist das Result in deinem Quelltext.

DeddyH 12. Apr 2012 13:15

AW: Vokal ersetzen
 
Oder kürzer:
Delphi-Quellcode:
for z := 1 to Length(txt) do
  if (Upcase(txt[z]) in ['A', 'E', 'I', 'O', 'U']) then
    txt[z] := v;

Axl 12. Apr 2012 13:22

AW: Vokal ersetzen
 
So war meine Idee vorhin auch. Nur habe ich nun noch das Problem das ich nicht v also den neuen Vokal an die Stelle des alten bekomme.

v:=lbvokal.items.Add[z] ist ja falsch

Muss ich jetzt noch z hochzählen in einer Schleife?

p80286 12. Apr 2012 13:24

AW: Vokal ersetzen
 
Zitat:

Zitat von Axl (Beitrag 1161517)
Und wie wäre das dann mit einer Prozedur. Wir sollen es damit machen. Was ist das Result in deinem Quelltext.

Wo genau klemmt es denn?
Bummi hat Dir doch schon ein schönes Beispiel für eine Funktion geliefert.

Gruß
K-H

wenn Du den Vokal in ein EditFeld eingibst, dann solltest Du ihn über v:=edit1.Text[1]; bekommen.
(Fehlerprüfungen hab ich mir mal geschenkt)

Axl 12. Apr 2012 13:28

AW: Vokal ersetzen
 
Also hier mein Quelltext für die Prozedur..
Delphi-Quellcode:
var z    : integer;
    v    : SHORTSTRING;
begin
v:=evokal.text;
FOR z:=1 TO LENGTH(txt) DO
IF (txt[z]= 'a')or (txt[z]= 'e')or (txt[z]= 'i') or (txt[z]= 'o') or (txt[z]= 'u')
 or (txt[z]= 'A') or (txt[z]= 'E') or (txt[z]= 'I') or (txt[z]= 'O') or (txt[z]= 'U')
THEN txt[z]:=v;
v:=lbdatei.items.Add(INTTOSTR(z));
end;
Beim letzten funktioniert es nicht.
Also ab v:=...
Es werden nicht die Vokale geändert. Der Text bleibt gleich.

DeddyH 12. Apr 2012 13:33

AW: Vokal ersetzen
 
Tja, dann sag uns mal, was z, txt und v ist.

Axl 12. Apr 2012 13:37

AW: Vokal ersetzen
 
Also
- v ist der neue Vokal den ich über das Editfeld eingebe
- txt ist der Text (ARRAY [1..50] of STRING)
- z soll die Position sein wo der neue vokal an die Stelle des alten kommt.
In txt soll der Vokal v für alle Vokale die im text enthalten sind eingefügt werden.

Bummi 12. Apr 2012 13:45

AW: Vokal ersetzen
 
:wall:

DeddyH 12. Apr 2012 13:53

AW: Vokal ersetzen
 
Also, ich persönlich verstehe nicht, was Du da zu tun versuchst. Mir scheint, Du bist mit Deinen eigenen Variablen durcheinander geraten. Beachte auch bitte den Hinweis von p80286:
Zitat:

wenn Du den Vokal in ein EditFeld eingibst, dann solltest Du ihn über v:=edit1.Text[1]; bekommen.
(Fehlerprüfungen hab ich mir mal geschenkt)

Bummi 12. Apr 2012 14:00

AW: Vokal ersetzen
 
Wenn Du sowas machst
Delphi-Quellcode:
txt ist der Text (ARRAY [1..50] of STRING)
Meinst Du dann
Delphi-Quellcode:
for i := 1 to Length(text[0]) do
  begin
   if text[0][i] ......
  end;
und warum >> v : SHORTSTRING;

Axl 12. Apr 2012 14:00

AW: Vokal ersetzen
 
Nein txt:= ARRAY[1..50] OF STRING[255].
Für Shortstring geht auch String.
Mein Fehler liegt nur noch in dem Aufruf. V soll in der Listbox alle Vokale ersetzen. Also zum Beispiel aus "Inhalt" durch eingabe des Vokal u in dem Editfeld "Unhult" machen.

DeddyH 12. Apr 2012 14:03

AW: Vokal ersetzen
 
Delphi-Quellcode:
for i := 0 to DeineListbox.Items.Count - 1 do
  DeineListbox.Items[i] := Ersetze(DeineListbox.Items[i], DeinEdit.Text[1]);
So einfach könnte das sein, Du brauchst halt nur noch die "Ersetze"-Routine.

Bummi 12. Apr 2012 14:12

AW: Vokal ersetzen
 
Für mein Verständnis müsste txt ein String und v ein Char sein ....

Axl 12. Apr 2012 14:20

AW: Vokal ersetzen
 
Meine Datentypen also String usw. funktionieren da ich ja schon andere prozeduren eingefügt habe.

Mein einziges problem noch:
v soll als Wert in die listbox, also sowas wie v:=lb.items.add(weis ich nicht??))<-muss noch was eingefügt werden.
Mir fehlt der korrekte Aufruf.
e_xs.text:=FLOATTOSTR(xs); wäre ja nicht für eine Listbox aber das halt nur für eine Listbox mit v.

DeddyH 12. Apr 2012 14:31

AW: Vokal ersetzen
 
Nochmal ganz langsam für alte Männer: Du willst in irgendeinem String die Vokale durch einen bestimmten ersetzen, der in ein Edit eingegeben werden soll, soweit richtig? Wenn ja, wo kommen die ursprünglichen Strings her und wo genau sollen die bearbeiteten hin?

p80286 12. Apr 2012 15:10

AW: Vokal ersetzen
 
Alte Männer ist Gut!!


Zitat:

Zitat von Axl (Beitrag 1161555)
Mein einziges problem noch:
v soll als Wert in die listbox,...

dafür gibt es
Delphi-Quellcode:
lb.Items.Add(v);
Zitat:

Zitat von Axl (Beitrag 1161555)
also sowas wie v:=lb.items.add(weis ich nicht??))

Das kann nicht funktionieren da das .Add einen integer-Wert zurück gibt, Du aber V als Shortstring definiert hast.

Zitat:

Zitat von Axl (Beitrag 1161555)
Mir fehlt der korrekte Aufruf.

Da scheint noch das eine oder andere zu fehlen.

Gruß
K-H

Bummi 12. Apr 2012 15:15

AW: Vokal ersetzen
 
><((((º> ?


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