Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Umlaute umwandeln in zeichenkette (https://www.delphipraxis.net/143412-umlaute-umwandeln-zeichenkette.html)

Mabeb 15. Nov 2009 16:30


Umlaute umwandeln in zeichenkette
 
Hallo erstmal

Wir behandeln zur zeit das Thema Zeichen an bestimmten stellen suchen. Daraufhin haben wir eine aufgabe bekommen, die lautet: Ein Programm sucht in einer Zeichenkette nach alle Umlauten (ä,ö,ü)
und wandelt sie in ae,oe und ue um. Außerdem sollen wir die Zeichenkette an Datei laden (was auch immer das heist). Wir haben schon 10 min daran gearbeitet und keiner hat das irgendwie ansatzweise in einem quellcode verarbeiten können. Somit kommt jetzt meine Frage: könntet ihr mir einige Tips oder Lösungen für das Problem geben (letzte Rettung).Bitte helft mir.

ps: habs schon alleine eine stunde probiert doch mir fällt nichts ein

Klaus01 15. Nov 2009 16:56

Re: Umlaute umwandeln in zeichenkette
 
Guten Abend,

wie willst Du denn die Zeichenkette darstellen, in einem Memo?
-> Memo1.loadFromFile
Zeichen ersetzen -> Delphi-Referenz durchsuchenStringReplace (wenn Ihr das benutzen dürft?)

Grüße
Klaus

Mabeb 15. Nov 2009 17:14

Re: Umlaute umwandeln in zeichenkette
 
Der Benutzer muss die Zeichenkette (z.B. häh) in ein edit feld eingeben und die Umlaute werden dann in einem label umgewandelt ausgegeben. Somit steht haeh da anstatt häh. Das umwandeln per button versteht sich ja.

Gargoyl 15. Nov 2009 17:15

Re: Umlaute umwandeln in zeichenkette
 
Also wenn ihr Delphi-Referenz durchsuchenStringReplace nicht nutzen dürft, aber externe Komponenten benutzten dürft, würde ich mir z.B. TPerlRegEx runter laden, und das mit einem regulären Ausdruck machen. Das geht ganz einfach mit regulären Ausdrücken. :zwinker:

Namenloser 15. Nov 2009 17:20

Re: Umlaute umwandeln in zeichenkette
 
Also im einfachsten Falle würde ich den String einfach zeichen für Zeichen in einer for-Schleife durchgehen, überprüfen ob das aktuelle Zeichen ein Umlaut ist, z.B. mit einer case-Struktur, und dann ggf. das Zeichen ersetzen und anschließend mithilfe der Funktion insert noch ein e anfügen.
Delphi-Quellcode:
case String[i] of
  'ä':
  begin
    String[i] := 'a';
    Insert('e', String, i+1);
  end;
end;
Könnte man noch etwas vereinfachen mithilfe von Sets und Arrays, aber das überlasse ich dir.

Mabeb 15. Nov 2009 17:45

Re: Umlaute umwandeln in zeichenkette
 
was bedeutet das i in deinem code

haentschman 15. Nov 2009 18:01

Re: Umlaute umwandeln in zeichenkette
 
Hallo... :hi:

das [i] (Integer) stellt die Position des Cursors im String dar. Bsp. i:= 3 entspricht dem 3. Zeichen im String

PS: case mit Strings funktioniert so nicht :warn:
[edit] Kommando zurück... mit einzelnen "Buchstaben" gehts schon. nur nicht mit ganzen String´s[/edit]

Zitat Hilfe:
Zitat:

case SelektorAusdruck of
CaseListe1: Anweisung1;
...
CaseListen: Anweisungn;
end

Hierbei ist SelektorAusdruck ein beliebiger Ausdruck eines ordinalen Typs, der kleiner als 32 Bit ist (String-Typen und ordinale Typen, die größer als 32 Bit sind, sind nicht zulässig). Für CaseListe kann folgendes angegeben werden:

Eine Zahl, eine deklarierte Konstante oder ein anderer Ausdruck, den der Compiler auswerten kann, ohne dazu das Programm selbst auszuführen. CaseListe muss von einem ordinalen Typ sein, der zum Typ von SelektorAusdruck kompatibel ist. 7, True, 4 + 5 * 3, 'A', und Integer('A') sind demnach als CaseListe zulässig, Variablen und die meisten Funktionsaufrufe dagegen nicht. (Einige integrierte Funktionen wie Hi und Lo können in einer CaseListe enthalten sein. Siehe Konstante Ausdrücke.)
Ein Teilbereich der Form Erster..Letzter, wobei Erster und Letzter den obigen Kriterien entsprechen müssen und Erster kleiner oder gleich Letzter sein muss.
Eine Liste der Form Element1, ..., Elementn, wobei jedes Element den obigen Kriterien entsprechen muss.

DeddyH 16. Nov 2009 08:51

Re: Umlaute umwandeln in zeichenkette
 
In Pseudocode könnte das dann so aussehen:
Code:
Laufvariable = 1
Ergebnis = ''
Solange Laufvariable <= Stringlänge Eingangsstring

  wenn Eingangsstring[Laufvariable] ist
    'ä': Ergebnis = Ergebnis + 'ae'
    'ö': Ergebnis = Ergebnis + 'oe'
    'ü': Ergebnis = Ergebnis + 'ue'
  ansonsten
    Ergebnis = Ergebnis + Eingangsstring[Laufvariable]

  Laufvariable = Laufvariable + 1
Das in eine Funktion gepackt, die einen String entgegennimmt und einen String ausgibt, und das Problem sollte gelöst sein.


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