![]() |
Leerzeichen in Unterstriche umwandeln
Hallo,
ich hab ein Problem mit Leerzeichen, bzw. dem Umwandeln. Und zwar schreibe ich gerade an einem Programm was Text im CeasarCode verschüsseln soll, das halt am besten mit Leerzeichen oder Umwandlung der Leerzeichen in _ oder der ähnlichen. Der Quellcode sieht immoment wie folgt aus:
Delphi-Quellcode:
Das ist der Programmteil fürs Verschlüsseln. Wenn ich da allerdings nun einen Satz mir Leerzeichen eingebe kommt unten ein zusammengequetschtes Zeug raus und ist nach dem Entschlüsseln kaum zu lesen. :gruebel:
begin
s:=edein.text; sch:=StrToint(lbein.text); FOR I:=1 TO length(s) DO BEGIN c:=s[i]; case c of 'A' .. 'Z' : s1 := s1 + c; 'a' .. 'z' : s1 := s1 + upcase(c); 'ß' : s1 := s1 + 'SS'; 'ä' : s1 := s1 + 'AE'; 'ö' : s1 := s1 + 'OE'; 'ü' : s1 := s1 + 'UE'; 'Ä' : s1 := s1 + 'AE'; 'Ö' : s1 := s1 + 'OE'; 'Ü' : s1 := s1 + 'UE'; END; END; aus:=''; for ii:=1 to length(s1) do begin c:=s1[ii]; ASCII:=ord(c)+sch; aus:=aus+CHR(ASCII); end; edaus.lines.add(aus); end; Freu mic hschon auf eure Beiträge :) |
Re: Leerzeichen in Unterstriche umwandeln
Schau dir mal StringReplace() an
|
Re: Leerzeichen in Unterstriche umwandeln
Hallo,
Zitat:
Delphi-Quellcode:
Welchen Wert enthält sch?
' ' : s1 := s1 + '_';
Wenn Ord(c) + sch > 255 wird, können aus Chr(Ascii) nichtdarstellbare Zeichen werden. |
Re: Leerzeichen in Unterstriche umwandeln
Zitat:
|
Re: Leerzeichen in Unterstriche umwandeln
Zitat:
Wie kommst du denn darauf? Zitat:
|
Re: Leerzeichen in Unterstriche umwandeln
Hallo erstmal,
Schau die mal diesen Tread von mir an, ich habe auch das Problem gehabt diverse Zeichen zu ersetzten. Vieleicht hilft Dir der ja weiter, dort habe ich dann auch die Lösung mit StringReplaced genutzt. ![]() MFG Jens |
Re: Leerzeichen in Unterstriche umwandeln
Zitat:
StringReplace erstetzt nur ein Zeichen/String (und das notfalls mehrmals) aber irgendwo hier in der DP gab's 'ne StringReplace-Variante, der man statt Strings ganze Arrays übergeben konnte. (evtl. sogar in der CodeLib) |
Re: Leerzeichen in Unterstriche umwandeln
Zitat:
Sch steht hier für schlüssel und ist eine zahl die vom Benutzer gewählt wird also 5 oder 6 oder auch 1234, das geht soweit auch wieder zu entschlüsseln auch wenns bei großen zahlen meistens nach humbuk aussieht^^ kann man denn lehrzeilen mit StringReplace() ersetzen? PS: Ein 'Hallo' würde mit nem Schlüssel von 1234 verschlüsselt ungefähr so aussehen: ! Wie man erkennt erkennt man nichts aber kopiert mans ins Programm rein udn entschlüsselt gehts^^ |
Re: Leerzeichen in Unterstriche umwandeln
Hallo,
Zitat:
Delphi-Quellcode:
StringReplace(Zeichenfolge,#13#10#13#10,'****',[rfReplaceAll]);
|
Re: Leerzeichen in Unterstriche umwandeln
lass mal besser die Umwandlung von ß und Umlauten sein, die ist irreversibel und damit nicht mehr entschlüsselbar.
Im Gegensatz zur Umwandlung zu Caesars Zeiten geht es doch darum, alle Zeichen eines Strings um den gleichen Versatz zu verschieben, oder? Würde ich jedenfalls mal empfehlen, denn dann fängst du auch Kandidaten mit Akzenten etc. ein ... Und dann reicht es völlig, die Position im zugrundeliegenden Zeichensatz zu ermitteln, den Versatz zu addieren und danach wieder in ein Zeichen zu verwandeln, allerdings modulo 256, weil sonst ein Überlauf entstehen könnte, bei dem ich nicht weiß, was Delphi draus macht. Also z.B. so:
Delphi-Quellcode:
Man kann das natürlich auch zusammenfassen in z.B.const versatz = 7; function codieren(s: string): string; var i: integer; c: char; // ein Zeichen p: integer; x: string; // das Zwischenergebnis begin x:=''; for i:=1 to Length(s) do begin c:=s[i]; p:=ord(c); p:=(p+versatz) mod 256; c:=chr(p); x:=x+c; end; Result:=x; end; function decodieren(s: string): string; var i: integer; c: char; // ein Zeichen p: integer; x: string; // das Zwischenergebnis begin x:=''; for i:=1 to Length(s) do begin c:=s[i]; p:=ord(c); p:=(p-versatz) mod 256; // Minus statt Plus! c:=chr(p); x:=x+c; end; Result:=x; end;
Delphi-Quellcode:
das macht's aber eigentlich nur unlesbar und bringt kaum Vorteile.
x:=x+chr((ord(s[i])+/-versatz) mod 256);
Wichtig: der resultierende String enthält in der Regel auch unlesbare bzw. nicht druckbare Zeichen, was aber normalerweise nichts machen dürfte, weil man es ja nicht lesen soll. Das gibt nur Probleme, wenn man es auch in einer Datei abspeichern will. Da gibt es zwei Möglichkeiten: 1) Speichern in binärer Datei, dann machen die Steuerzeichen nichts 2) Speichern in Textdatei, dann muss man die Routine abwandeln derart, dass nur die lesbaren Zeichen umgewandelt werden, also von #32 bis #255 Hierzu muss zunächst einmal eine Abbildung von #32..#255 auf #0..223 erfolgen, danach der gleiche Algorithmus, aber mit modulo 224, und danach wieder eine Abbildung von #0..#223 auf #32..#255 ... das war's! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:05 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 by Thomas Breitkreuz