Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Leerzeichen in Unterstriche umwandeln (https://www.delphipraxis.net/128749-leerzeichen-unterstriche-umwandeln.html)

Jens Hartmann 6. Feb 2009 17:37

Re: Leerzeichen in Unterstriche umwandeln
 
Hallo nahpets,

Zitat:

Leerzeilen könntest Du an zwei aufeinanderfolgende Zeilenumbrüchen (#13#10#13#10) erkennen, das müsste mit StringReplace eigentlich zu ersetzen sein.
Delphi-Quellcode: markieren
StringReplace(Zeichenfolge,#13#10#13#10,'****',[rfReplaceAll]);

Habe auch mel ein bißchen mit deinem Code gespielt. also ich bekomme es nicht hin ein Leerzeile aus einer Datei zu löschen. Das Problem ist, der Befehl von Dir wird zwar ausgeführt aber ohne Änderung.

Beim Debuggen, ändern sich meine Variablen nicht. Alle anderen StringReplaced Befehle werden ausgeführt und meine Variable ändert sich.

MFG

Jens

Snow Dragon 9. Feb 2009 09:05

Re: Leerzeichen in Unterstriche umwandeln
 
Hallo nochmal,
hab das ganze jetzt auch nochmal mit StringReplace() versucht, ging auchnicht. Genauso wie wenn ich in die Schliefe noch was einfüge kommt imemr ein zusammengeklatschter Text raus. Also aus "test test" wird 'TESTTEST'. Gibts vielleicht noch ne andere Möglichkeit?

himitsu 9. Feb 2009 09:36

Re: Leerzeichen in Unterstriche umwandeln
 
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 :stupid:


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;

Snow Dragon 10. Feb 2009 10:51

Re: Leerzeichen in Unterstriche umwandeln
 
snalso mit deiner prozedur klappt es jetzt^^ ich versteh zwar imemnoch nicht genau wieso er das bei mir nicht gemacht hatte, aber es geht, ist ja schonmal was. Der quellcode des programm steht am anfangsbeitrag hatte sich bis eben nicht viel geändert

himitsu 10. Feb 2009 11:58

Re: Leerzeichen in Unterstriche umwandeln
 
drum fragte ich ja nach dem letzen Code,
denn wenn ich ein
Delphi-Quellcode:
' '     : s1 := s1 + ' ';
in das CASE reinmach, dann bleibt das Leerzeichen erhalten.

nja, abgesehn, daß bei deiner Verschlüsselung die Berechnung nicht stimmte ... wie gesagt, du mußt auf den Wertebereich achten (also daß alles innerhalb der Buchstaben bleibt) und das Leerzeichen wird unverändert beibehalten.

kannst ja gern das Ergebnis deiner Funktion hiermit vergleichen
http://www.ivhp.de/files/caesar.htm
wenn das Selbe rauskommt, daß isses sozusagen richtig :stupid:
Delphi-Quellcode:
PROCEDURE TForm1.FormCreate(Sender: TObject);
VAR s, s1, aus: String;
    sch, i, ASCII: Integer;

BEGIN
  sch := StrToInt(lbein.text);
  s  := edein.Text;
  s1  := '';
  FOR i := 1 TO Length(s) DO
    CASE s[i] OF
      'A'..'Z' : s1 := s1 + s[i];
      'a'..'z' : s1 := s1 + UpCase(s[i]);
      'ß'     : s1 := s1 + 'SS';
      'ä', 'Ä' : s1 := s1 + 'AE';
      'ö', 'Ö' : s1 := s1 + 'OE';
      'ü', 'Ü' : s1 := s1 + 'UE';
      ' '     : s1 := s1 + ' ';
    END;
  aus := '';
  FOR i := 1 to Length(s1) DO
  BEGIN
    IF s1[i] <> ' ' THEN
    BEGIN
      ASCII := Ord(s1[i]) + sch;
      //WHILE ASCII > Ord('Z') DO ASCII := ASCII - 26;
      WHILE ASCII > Ord('Z') DO ASCII := ASCII - (Ord('Z') - Ord('A') + 1);
      aus := aus + Chr(ASCII);
    END
    ELSE
      aus := aus + s1[i];
  END;
  edaus.Text := aus;
END;

Snow Dragon 11. Feb 2009 12:31

Re: Leerzeichen in Unterstriche umwandeln
 
okay gut jetzt funktioniert alles, auch das verschlüsseln und die leerzeichen :-D danke an alle die mir geholfen haben


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:20 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz