Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   copy(text,x,y) durch while... do - schleife ersetzen? (https://www.delphipraxis.net/135844-copy-text-x-y-durch-while-do-schleife-ersetzen.html)

qwertz543221 18. Jun 2009 19:15


copy(text,x,y) durch while... do - schleife ersetzen?
 
hallo ich möchte folgende anweisung in eine while do schleife umwandeln, da ich denke, dass das kopieren mit dem delphi-internen befehl zu langsam sein könnte.
Delphi-Quellcode:
n:='5001';
while i<=length(text) do
  begin
  zahl:=copy(text,i,length(n));
  //befehlsfolge (...)
  i:=i+length(n)
  end;
  result:=textneu;
   end;
wie geht das am besten?

Andreas L. 18. Jun 2009 19:21

Re: copy(text,x,y) durch while... do - schleife ersetzen?
 
Irgendwie versteh ich nicht ganz was dein Code machen soll. Was hast du denn vor?

qwertz543221 18. Jun 2009 19:23

Re: copy(text,x,y) durch while... do - schleife ersetzen?
 
einfach nur das copy ersetzen, das ganze ist für rsa impl. gedacht

und ich bin der meinung, dass copy()einfach zu langsam ist, deshalb brauch ihc nur eine übersetzung des teils in eine while schleife

mkinzler 18. Jun 2009 19:25

Re: copy(text,x,y) durch while... do - schleife ersetzen?
 
Delphi-Quellcode:
for i := x to x+y do
    s := s + text[i];

qwertz543221 18. Jun 2009 19:28

Re: copy(text,x,y) durch while... do - schleife ersetzen?
 
ich hab das schon so ähnlich probiert, aber irgendwie scheint das nicht zu klappen, vorallem mit dem späteren
Delphi-Quellcode:
i:=i+length(n)

das soll nämlich nicht nur +1, sondern +length(n) rechnen

himitsu 18. Jun 2009 19:34

Re: copy(text,x,y) durch while... do - schleife ersetzen?
 
Zitat:

Zitat von qwertz543221
Delphi-Quellcode:
i:=1;

 while i<=length(text) do
  begin
  zahl:=copy(text,i,length(n));
  wa:=zahl;
  wa:=mathe.PotenzModulo(wa,d,n);
  textneu:=textneu+chr(strtoint(mathe.Quotient(wa,'256')))+chr(strtoint(mathe.Modulo(wa,'256')));
  i:=i+length(n)
  end;
  result:=textneu;
   end;

bitte nicht alles per PN (mein Postfach ist eh schon überfüllt)

und wie du an den Reaktionen der Anderen erkennst, darfst du wichtige Dinge nicht weglassen, sonst kann keiner wirklich helfen :zwinker:

Delphi-Quellcode:
Wenn das n nicht zufällig 1 isst, dann bekommst du das Copy garnicht los.

[pre]SetLength(result, Length(text) div length(n) * 2);
i:=1;
for i := 1 to length(text) div length(n) do
begin
  wa:=copy(text,i,length(n));
  wa:=mathe.PotenzModulo(wa,d,n);
  mathe.QuotientModulo(wa,'256', q, m);
  result[t*2-1]:=chr(strtoint(q));
  result[t*2]:=chr(strtoint(m));
end;[/pre]

dann könnte man eine Rechenoperation einsparen
> Quotient und Modulo gemeinsam berechnen

ja und nicht ständig die 2 Zeichen an den "result"-String anhängen.
dieses verlängert den String ständung und kopiert diesen dazu um.

mkinzler 18. Jun 2009 19:34

Re: copy(text,x,y) durch while... do - schleife ersetzen?
 
Zitat:

Zitat von qwertz543221
ich hab das schon so ähnlich probiert, aber irgendwie scheint das nicht zu klappen, vorallem mit dem späteren
Delphi-Quellcode:
i:=i+length(n)

das soll nämlich nicht nur +1, sondern +length(n) rechnen

Und warum das? Entwser immer ein Zeichen oder gleich den ganzen String. Falls Copy() wirklich das Problem wäre, dann würdest du das Problem durch öfteres Aufrufen noch verstärken

qwertz543221 18. Jun 2009 19:40

Re: copy(text,x,y) durch while... do - schleife ersetzen?
 
ok danke
die zwei zeichen werden doch an einen neuen angehängt, an dem alten ändert sich dabei nichts

ich dachte nur, dass man das copy in eine while schleife ändern kann, weil die so schön schnell ist

zb

Delphi-Quellcode:
i:=1;
while i<=length(text) do
begin
  textneu:=textneu+text[i];
  i:=i+1;
end;
soweit geht es ja

nur dann will ich zum nächsten block springen(also eigentlich sollte das nur+length(modul) sein, doch das geht iwie nicht

[edit=mkinzler] Mfg, mkinzler[/edit]

mkinzler 18. Jun 2009 19:46

Re: copy(text,x,y) durch while... do - schleife ersetzen?
 
Wenn du aber in dieser Schleife mehr als 1 zu i hinzuzählst kopierst machst du was anderes als Copy()

Delphi-Quellcode:
text := 'Hallo Welt!';
x := 2;
y := 8;
n := 2;

s := Copy( text, x, y); // s: 'allo Wel';

i:=1;
while i<=length(text) do
begin
  textneu:=textneu+text[i];
  i:=i+n;
end;
/7Textneu: 'HloWl!'

qwertz543221 18. Jun 2009 19:49

Re: copy(text,x,y) durch while... do - schleife ersetzen?
 
ich denke,da musste auch i durch x ersetzen und die schleife bis y laufen lassen


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz