![]() |
simple Konvertierung von Stringcode in andere Zeichen
Hi ich möchte einen stringcode, der hauptsächlich aus Zahlen besteht in andere Zahlen umwandeln, und wieder zurück.
Der Code besteht aus folgenden Zeichen: 1234567890|;: für jedes Zeichen soll es zwei Konvertierungsmöglichkeiten geben, also kann 1=§ aber auch 1=% sein (bsp.) bei der encodierung wird dann geprüft, und der code wiederhergestellt. ich hätte es jetzt mit einer extrem langen if then else- Kette gemacht :lol: aber das geht doch auch bestimmt anders oder? :thumb: mfg cRayZo |
Re: simple Konvertierung von Stringcode in andere Zeichen
Nach welchen Kriterien soll 1 zu % oder § werden?
|
Re: simple Konvertierung von Stringcode in andere Zeichen
Eventuell hilft Die die Case-Anweisung weiter. Als Ordinal-Typ kannst Du z.B. ORD(Zeichenkette[i]) in einer Schleife verwenden, die den String Zeichen für Zeichen durchgeht. Hier ein Pseudo-Code aus einer Website kopiert...
Delphi-Quellcode:
SCRaT
case <bariable> of { die Variable muß ein Ordinaltyp sein }
wert1: ... Anweisung wert2...wert5: anweisung wert6, wert9: begin ... Anweisung end; else ... alles, was nicht oben drin vorkommt end; { Ende der Case-Anweisung } |
Re: simple Konvertierung von Stringcode in andere Zeichen
Zitat:
also random(2) bei 0 dann x bei 1 dann y das ist ja auch nicht mein Problem^^ vom Grund her wüsste ich ja auch wies funktioniert, aber eine nachträgliche Änderung der verschiedenen Zahlen wäre dann zu kompliziert wenn ich z.B. eine if then else kette mache. Wenn ich für jeden Buchstabe eine stringvariable erstelle und dann mit einer Warscheinlichkeit 1 zu length(string) einen Buchstaben daraus auswähle der dann verwendet wird. Wie kann ich das im Code umsetzen?(das dick-gedruckte) mir fehlen die Befehle. |
Re: simple Konvertierung von Stringcode in andere Zeichen
Delphi-Quellcode:
Aufruf:
function CharPos(const S: string; const C: Char): Integer;
begin for Result := 1 to Length(S) do if S[Result] = C then Exit; Result := 0; end; function TransformString(const input, source, dest:string):string; var i, p : Integer; begin SetLength(Result, length(input)); for i := 1 to length(input) do begin p := CharPos(source, input[i]); if p = 0 then raise Exception.Create('invalid char'); Result[i] := dest[p]; end; end;
Delphi-Quellcode:
Zum Rückverwandeln muss einfach source und dest vertauscht werden.
const
source = '1234567890|;:'; // Zeichen für Ausgangsdaten dest = 'ABCDEFGHIJKLM'; // Zeichen für transformierten String begin Caption := TransformString('56456|444:', source, dest); |
Re: simple Konvertierung von Stringcode in andere Zeichen
okay der code klappt. Ich hab aber nochmal ne frage dazu.
wie kann man den Fortschritt dieser funktion abfragen? |
Re: simple Konvertierung von Stringcode in andere Zeichen
Zitat:
|
Re: simple Konvertierung von Stringcode in andere Zeichen
du könntest der funktion eine Callback-routine übergeben und diese in der schleife aufrufen.
so in etwa (ungetestet):
Delphi-Quellcode:
oder du greifst in der schleife gleich auf die entsprechenden Instanzen zur anzeige zu (nicht zu empfehlen).
Type TCallback=procedure(percent:byte) {of object};
pocedure {TForm1.}CallbackProc(percent:byte); begin //progressbar etc. ändern end; function TransformString(const input, source, dest:string;cb:TCallback):string; ... for ... begin .. cb(Round(100*i/length(input))); end; Caption := TransformString('56456|444:', source, dest,CallbackProc); ggf. muss application.processmessage o.ä. verwendet werden. HTH Frank |
Re: simple Konvertierung von Stringcode in andere Zeichen
Zitat:
Delphi-Quellcode:
In der Schleife nach jedem Durchlauf einfach
ProgressBar1.Max := Length(DeinString);
Delphi-Quellcode:
Müsste passen...
ProgressBar1.Value := ProgressBar1.Value + 1;
SCRaT |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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