Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi simple Konvertierung von Stringcode in andere Zeichen (https://www.delphipraxis.net/98464-simple-konvertierung-von-stringcode-andere-zeichen.html)

cRayZo 27. Aug 2007 21:14


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

quendolineDD 27. Aug 2007 21:20

Re: simple Konvertierung von Stringcode in andere Zeichen
 
Nach welchen Kriterien soll 1 zu % oder § werden?

scrat1979 27. Aug 2007 21:34

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:
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 }
SCRaT

cRayZo 28. Aug 2007 13:04

Re: simple Konvertierung von Stringcode in andere Zeichen
 
Zitat:

Zitat von quendolineDD
Nach welchen Kriterien soll 1 zu % oder § werden?

nach der warscheinlichkeit 1 zu 1

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.

shmia 28. Aug 2007 13:22

Re: simple Konvertierung von Stringcode in andere Zeichen
 
Delphi-Quellcode:
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;
Aufruf:
Delphi-Quellcode:
const
   source = '1234567890|;:';   // Zeichen für Ausgangsdaten
   dest  = 'ABCDEFGHIJKLM';   // Zeichen für transformierten String
begin
   Caption := TransformString('56456|444:', source, dest);
Zum Rückverwandeln muss einfach source und dest vertauscht werden.

cRayZo 28. Aug 2007 15:21

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?

shmia 28. Aug 2007 16:00

Re: simple Konvertierung von Stringcode in andere Zeichen
 
Zitat:

Zitat von cRayZo
wie kann man den Fortschritt dieser funktion abfragen?

Man könnte, aber die Umwandlung der Zeichen geht so schnell, dass ein Progressbar gar nicht nachkommen würde.

_frank_ 28. Aug 2007 16:04

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:
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);
oder du greifst in der schleife gleich auf die entsprechenden Instanzen zur anzeige zu (nicht zu empfehlen).
ggf. muss application.processmessage o.ä. verwendet werden.

HTH Frank

scrat1979 28. Aug 2007 17:39

Re: simple Konvertierung von Stringcode in andere Zeichen
 
Zitat:

Zitat von cRayZo
okay der code klappt. Ich hab aber nochmal ne frage dazu.

wie kann man den Fortschritt dieser funktion abfragen?

Mit einer ProgressBar. Aber wie schon geschrieben wird es wohl zu schnell für eine sinnvolle Anzeige sein...

Delphi-Quellcode:
ProgressBar1.Max := Length(DeinString);
In der Schleife nach jedem Durchlauf einfach

Delphi-Quellcode:
ProgressBar1.Value := ProgressBar1.Value + 1;
Müsste passen...

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