Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.171 Beiträge
 
Delphi 12 Athens
 
#13

Re: Leerzeichen in Unterstriche umwandeln

  Alt 9. Feb 2009, 08:36
Wie sieht denn dein Code nun aus?
Wäre ja nicht schlecht, wenn wir dennoch den Fehler finden und du dabei lernst/erfährst warum es nicht ging.

Hast du beim StringReplace auch den Rückgabewert übernommen?
Ist oftmals ein/DER Fehler, warum da nix passiert


Delphi-Quellcode:
VAR S: AnsiString;
    I: Integer;
    B, Schl: Byte;

BEGIN
  // ALLES in Großbuchstaben umwandeln
  S := AnsiUpperCase(edein.Text);
  // Umlaute ersetzen
  S := StringReplace(S, 'Ä', 'AE', [rfReplaceAll]);
  S := StringReplace(S, 'Ö', 'OE', [rfReplaceAll]);
  S := StringReplace(S, 'Ü', 'UE', [rfReplaceAll]);
  S := StringReplace(S, 'ß', 'SS', [rfReplaceAll]);
  // nicht erlaubte Zeichen rauslöschen
  FOR I := Length(S) DOWNTO 1 DO
    IF NOT (S[I] IN [' ', 'A'..'Z']) THEN
      Delete(S, I, 1);
  // Schlüssel holen
  Schl := StrToInt(lbein.Text);
  FOR I := 1 to Length(S) DO
    // das Leerzeichen wird nicht verarbeitet (war doch bei Cäsar so?)
    IF S[I] IN ['A'..'Z'] THEN
    BEGIN
      // bei Cäsar werden nur die Buchstaben in sich verschoben

      // Buchstabe in Zahl umwandeln und auf den Nullpunkt verschieben
      B := Ord(S[I]) - Ord('A');
      // Schlüssel zurechnen und den Zahlenbereich anpassen
      B := (B + Schl) MOD 26;
      // Zahl wieder in den Buchstabenbereich verschieben und in ein Zeichen Wandeln
      S[I] := Chr(B + Ord('A'));
    END;
    edaus.Text := S;
  END;
Buchstabe ... auf den Nullpunkt verschieben
ist nur, damit sich leichter Rechnen läßt, da es sonst etwa so aussehen würde:
Delphi-Quellcode:
VAR B, Schl: Integer;

Schl := StrToInt(lbein.Text);

IF S[I] IN ['A'..'Z'] THEN
BEGIN
  // bei Cäsar werden nur die Buchstaben in sich verschoben

  // Buchstabe in Zahl umwandeln
  B := Ord(S[I]);
  // Schlüssel zurechnen und den Zahlenbereich anpassen
  B := B + Schl;
  WHILE B < Ord('A') DO A := A + 26;
  WHILE B > Ord('Z') DO A := A - 26;
  // Zahl wieder in den Buchstabenbereich verschieben und in ein Zeichen Wandeln
  S[I] := Chr(B);
END;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat