![]() |
Replace
Ich habe folgende Formel:
Delphi-Quellcode:
Wie muss ich weiter machen, dass ich folgendes einsetzen kann, damit Umlaute ersetzt werden:
function myreplace(text:string;alt:string;neu:string): string;
Delphi-Quellcode:
Wie muss ich die Formel programmieren?
w:= myreplace(w,'Ä','Ae');
w:= myreplace(w,'Ö','Oe'); w:= myreplace(w,'Ü','Ue'); W:= myreplace(w,'ä','ae'); W:= myreplace(w,'ö','oe'); W:= myreplace(w,'ü','ue'); W:= myreplace(w,'ß','ss'); Danke im Voraus.:thumb::thumb::thumb: |
AW: Replace
Du könntest einfach
![]() |
AW: Replace
Zitat:
![]() Zitat:
Geh das Problem doch mal langsam und logisch an und überleg dir was man machen muss um einen Text durch einen anderen zu ersetzen. Und nachdem du dir Gedanken gemacht hast fängst du an zu programmieren. Der Code in deinem anderen Thread sieht aus als hättest du ohne groß nachzudenken grob über den Daumen gepeilt einfach mal Code geschrieben und gehofft dass es so funktioniert. Wenn du dann zumindest mal das Grundgerüst hast und vom Prinzip her weißt was du tun musst, können wir dich auf ein paar letzte Kleinigkeiten aufmerksam machen. |
AW: Replace
Wenn du Replace nicht benutzen kann, ist der Sinn der Aufgabe wohl etwas mit einer Schleife zu machen. Dann könnte es so aussehen:
Delphi-Quellcode:
Result:='';
for i:=1 to Length(text) do begin if text[i]=alt then Result:=Result+neu else Result:=Result+text[i]; end; |
AW: Replace
Zitat:
|
AW: Replace
Zitat:
Wird so nur leider nicht klappen für
Delphi-Quellcode:
:P
function myreplace(text:string;alt:string;neu:string): string;
Wirst du spätestens bei einem Aufruf wie myreplace('Hallo Welt', 'Welt', 'Phillip') merken |
AW: Replace
Zitat:
|
AW: Replace
Zitat:
|
AW: Replace
Zitat:
Zitat:
Du kennst ja wie man in dem anderen Thread sieht schon Funktionen um Strings zu bearbeiten. Wie Schleifen funktionieren weißt du spätestens nach Jumpys Beitrag. |
AW: Replace
Zitat:
|
AW: Replace
Zitat:
Eventzell kann man die Funktionsdefinition wie folgt ändern, damit das klarer wird:
Delphi-Quellcode:
function myCharReplace(text:string;alt:char;neu:string): string;
Spaß beiseite: Da man ja kein Replace benutzen soll, würde ich folgern, dass auch so Dinge wie Pos, Copy usw. die man sonst vielleicht benutzen würde auch nicht gebraucht werden sollen. Dementsprechend müsste das Problem durch eine Verschachtelung von zwei Schleifen gelöst werden: Schleife 1 sucht den ersten Buchstaben von alt in text, wenn gefunden vergleicht schleife 2 alle Buchstaben in text ab dieser Stelle mit allen Buchstaben in alt. Stimmt alles überein, haben wir einen Treffer usw. P.S.: Wieso werden nach einem einzeiligen Delphi-Code-Block (fast) alle Zeilenumbrüche ignoriert? |
AW: Replace
Zitat:
Code:
Wobei die Frage ist ob "case" schon bekannt ist oder ob es mit "if..then..else" gelöst werden muß.
for i:= 1 to length(zeile) do
case zeile[i] of 'ü' : result:=result+'ue'; 'ö' : result:=result+'oe'; else result:=result+zeile[i]; Gruß K-H |
AW: Replace
Wenn man diese Replace-Funktion etwas intelligenter macht
Delphi-Quellcode:
könnte man sich damit auch eine generelle Umwandlung bauen, die auch von ae wieder zurück nach ä leisten kann.
function DoReplaceStr( const AStr: string; out ReplacedStr : string ) : Boolean;
begin if not Lookup.TryGetValue( AStr, ReplacedStr ) then if Enumerable<string>( Lookup.Keys ).Any( function( const key: string ) : Boolean begin Result := key.StartsWith( AStr ); end ) then Exit( False ) else ReplacedStr := AStr; Result := True; end; TReplaceCallback = reference to function( const AStr: string; out ReplacedStr: string ) : Boolean; function ReplaceStr( const AStr : string; ReplaceCallback : TReplaceCallback ) : string; var c: Char; Buffer, Replaced : string; begin Result := ''; Buffer := ''; for c in AStr do begin Buffer := Buffer + c; if ReplaceCallback( ABuffer, Replaced ) then begin Result := Result + Replaced; Buffer := ''; end; end; Result := Result + Buffer; end; :arrow: Ich weiß, geht weit über das Ziel hinaus ... aber ich will ja auch nicht seine Hausaufgaben machen :stupid: |
AW: Replace
Zitat:
MfG Dalai |
AW: Replace
zeile[i] ist ein case of char.
|
AW: Replace
Mmh, ich nahm an, dass
Delphi-Quellcode:
immer ordinale Typen haben will, aber es funktioniert tatsächlich, wenn die Auswahlmöglichkeiten Chars sind. Interessant, wusste ich bisher nicht :).
case
MfG Dalai |
AW: Replace
Zitat:
|
AW: Replace
Zitat:
War erst skeptisch, aber kann's wirklich übersichtlich machen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz