Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ein Zeichen durch eine Leerstelle ersetzen (https://www.delphipraxis.net/22526-ein-zeichen-durch-eine-leerstelle-ersetzen.html)

der olli 18. Mai 2004 21:09


Ein Zeichen durch eine Leerstelle ersetzen
 
Hallo,

wir arbeiten in Info im Moment mit Delphi und unsere Aufgabe ist es, ein vom Benutzer eingegebenes Wort zu prüfen und zwar mit Hilfe eines zweiten Eingabefeldes, wo der Benutzer einen Buchstaben eingeben soll, der in dem Wort vorkommt. Nach einem Druck auf einen Button soll der eingegebene Buchstabe durch ein Leerzeichen ersetzt und in einem dritten Eingabefeld das Wort OHNE den Buchstaben - also mit der Leerzeile an der/den ansprechenden Stelle/Stellen - ausgegeben werden.

Wir haben im Unterricht dieses Programm schon auf eine etwas andere Art verwendet, sodass nur ein Stück im Quellcode verändert werden muss (die Funktion dieses Programmes ersetzt den Buchstaben nicht durch ein Leerzeichen, sondern zählt, wie oft der eingegebene Buchstabe in dem eingegebenen Wort vorkommt und gibt die Anzahl des Vorkommens in einem dritten Eingabefeld aus - es wird also einfach der Buchstabe ersetzt). Hier ist der Quellcode:

Delphi-Quellcode:
procedure TFrmString.Einlesen(Var Text: String; Var Zeichen: Char);
 begin
  Text := EdText.Text;
  Zeichen := EdZeichen.Text[1];
 end;

procedure TFrmString.Ausgeben(Ergebnis: String);
begin
 EdErgebnis.Text := Ergebnis;
end;

{*************** selbstdefinierte Methoden ohne Klassenzugehörigkeit *********}

function gezaehlt(Text: String; Zeichen: Char): Shortint; // diese Funktion muss verändert werden, weiß aber nicht wie :(
Var Index: Shortint;
    Anzahl: Shortint;
begin
 Anzahl := 0;   // Initialisierung der Zeichenanzahl
 For Index := 1 TO Length(Text) Do
  If Text[Index] = Zeichen Then
   Anzahl := Anzahl + 1;
 gezaehlt := Anzahl; // Zuweisung an die Funktion erforderlich
end;


procedure TFrmString.BtZaehlenClick(Sender: TObject);
Var Text: String;
     Zeichen: Char;
     Anzahl: Shortint;
begin
 Einlesen(Text, Zeichen);
 Anzahl := gezaehlt(Text, Zeichen);
 Ausgeben('Anzahl von '+ Zeichen + ' : ' + IntToStr(Anzahl)); // hier sollte dann das Wort OHNE den Buchstaben stehen
end;

procedure TFrmString.BtBeendenClick(Sender: TObject);
begin
 FrmString.Close
end;

procedure TFrmString.BtLoeschenClick(Sender: TObject);
begin
 EdText.Text := '';
 EdZeichen.Text := '';
 EdErgebnis.Text := '';
end;
Ich bräuchte das am besten heute Abend noch, sitze da schon ca. zwei Stunden dran, aber bin zu blöd (bin kein Info-Ass). Ich glaube, das es nicht sehr viel Arbeit ist und hoffe, hier ist jemand bereit, mir zu helfen. Danke schonmal im Voraus!

StefanDP 18. Mai 2004 21:12

Re: Ein Zeichen durch eine Leerstelle ersetzen
 
Schau dir mal
StringReplace(...) an

der olli 18. Mai 2004 21:17

Re: Ein Zeichen durch eine Leerstelle ersetzen
 
Danke für deine schnelle Antwort, aber das hilft MIR leider auch nicht weiter, wie gesagt, bin ziemlich schlecht in Info. Habe über die Hilfe rausgefunden, das die Funktion so aufgerufen wird:

Delphi-Quellcode:
function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
Wie kann ich diese denn so umändern, das der eingegebene Buchstabe aus dem Feld "BtZeichen" durch eine Leerstelle ersetzt wird?

MathiasSimmack 18. Mai 2004 21:21

Re: Ein Zeichen durch eine Leerstelle ersetzen
 
Zitat:

Zitat von der olli
Danke für deine schnelle Antwort, aber das hilft MIR leider auch nicht weiter, wie gesagt, bin ziemlich schlecht in Info.

Dazu muss man keine großen Kenntnisse in Informatik haben. Ein bisschen Lesen reicht schon ;)
Zitat:

Code:
[b][color=red]function[/color][/b] StringReplace(const [b]S[/b],
  [color=red]Old[/color]Pattern,
  [color=red]New[/color]Pattern: string;
  Flags: TReplaceFlags): [color=red]string[/color];

Zumal es in der Hilfe sogar noch erklärt wird:
Borland hat nämlich dazu geschrieben
Mit StringReplace ersetzen Sie in dem angegebenen String den im Parameter OldPattern festgelegten Sub-String mit dem im Parameter NewPattern übergebenen neuen Sub-String. StringReplace nimmt an, daß der String Multibyte-Zeichen enthalten kann.

Wenn im Parameter Flags nicht rfReplaceAll enthalten ist, wird nur das erste Vorkommen von OldPattern im String S ersetzt. Andernfalls werden alle Instanzen von OldPattern durch NewPattern ersetzt.

Wenn der Parameter Flags rfIgnoreCase enthält, wird die Groß-/Kleinschreibung nicht berücksichtigt.

Thorben86 18. Mai 2004 21:43

Re: Ein Zeichen durch eine Leerstelle ersetzen
 
[OT] Das wird der Frau Moritz aber gar nicht gefallen, wenn du einen unbekannten Aufruf benutzt :thuimb: [OT]

Also ich geb dir den Tipp, dass du einfach noch ne neue String Variable nimmst, die du am anfang immer auf '' (also leer) setzt. Nun fügst du diesem text , falls "Text[Index] = Zeichen" ist, ein leerzeichen hinzu, anderenfalls einfach "Text[Index]".
@ Alle die sich darüber wundern: unsere Lehrerin hat nen Knall und keine Ahnung von der Materie :wall: :wall: :wall:
€dit: @MathiasSimmack: So besser. Du hast aber ansprüche. :zwinker:

Delphi-Quellcode:
{***** zeichen durch leerzeichen ersetzen *****}
function aendern(Text: String; Zeichen: Char): String;
Var Index: Shortint;

    text_neu:string;
begin
 text_neu:='';
 For Index := 1 TO Length(Text) Do
  If Text[Index] = Zeichen Then
    text_neu:=text_neu+' '
    else
   text_neu:=text_neu+text[index];

   result:=text_neu;
end;

//Der Aufruf
procedure TFrmString.b_ersetzen1Click(Sender: TObject);
Var Text: String;
     Zeichen,ersatzzeichen: Char;
begin
 Einlesen(Text, Zeichen,ersatzzeichen);
 Ausgeben(aendern(Text, Zeichen));
end;

MathiasSimmack 18. Mai 2004 21:47

Re: Ein Zeichen durch eine Leerstelle ersetzen
 
Zitat:

Zitat von Thorben86
@ Alle, die sich darüber wundern: unsere Lehrerin hat nen knall und keine Ahnung von der Materie :wall: :wall: :wall:

Solche Äußerungen würde ich mir verkneifen, wenn meine Deutschkenntnisse auch ganz offensichtlich zu wünschen übrig lassen:
Zitat:

[OT] Das wird der frau Moritz aber gar nicht gefallen, wenn du einen unbekanten Aufruf benutztz :thuimb: [OT]
:mrgreen:

der olli 18. Mai 2004 21:51

Re: Ein Zeichen durch eine Leerstelle ersetzen
 
Ah, bist also auch hier angemeldet... Gut zu wissen :) Ich tue morgen einfach so, als hätte ich keine andere Lösung gefunden, denn so ist es ja viel einfacher:

Delphi-Quellcode:
procedure TFrmString.BtErsetzenClick(Sender: TObject);
begin
 EdErgebnis.Text := StringReplace(EdText.Text,EdZeichen.Text,' ',[rfReplaceAll, rfIgnoreCase]);
end;
Trotzdem danke, ich kopier's mir mal in ein neues Programm zur Sicherheit :p


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