![]() |
Zeichen in einem String ersetzen???
Hi, kleine Frage wie kann ich ein '#' in einem String durch ',' ersetzen???
Hab schon gesucht aber da steht nur was von StringReplace das mein D3 Prof. leider nicht kennt. Mfg Tobi |
Re: Zeichen in einem String ersetzen???
|
Re: Zeichen in einem String ersetzen???
oder so:
Delphi-Quellcode:
Grüße
var
s:String; while pos('#',s) <> 0 do s[pos('#',s)]:=','; Klaus |
Re: Zeichen in einem String ersetzen???
*Delphi 3 startet*
tasache, gibts nicht... aber in dem fall is es einfach:
Delphi-Quellcode:
(sollte sogar performanter als generische funktionen sein, @marabu)
for i := 1 to length(s) do
if s[i] = '#' then s[i] := ','; @Klaus01: Sehr viel unperformanter als meine Variante, bei mir wird der string nur einmal durchlafuen, bei dir sher oft ;) |
Re: Zeichen in einem String ersetzen???
@Lukas: chapeau
|
Re: Zeichen in einem String ersetzen???
Zitat:
|
Re: Zeichen in einem String ersetzen???
na wenn er schon seinen hut vor mir zieht...?
|
Re: Zeichen in einem String ersetzen???
Zitat:
mfg tobi |
Re: Zeichen in einem String ersetzen???
@ ed~
der geschwindigkeitsunterschied kommt bei sehr großen strings zum ausdruck. und dann kann das sogar en vielfaches sein. |
Re: Zeichen in einem String ersetzen???
jop, pos macht nämlich nichts anderes als ich, nur dass es erstens zweimal aufgerufen wird bei jedem zu ersetzenden zeichen und zweitens - viel gravierender - den kompletten string durchsucht bis ein zu ersetzendes zeichen gefunden wird.
(außerdem müllts den callstack voll :stupid: ) |
Re: Zeichen in einem String ersetzen???
Wenns wirklich total auf Speed ankommt müsst man auch statt
Delphi-Quellcode:
verwenden können... Ord() is ja nix anderes als ein Typecast auf Byte :gruebel:
s[i] = '#'
//lieber not Boolean(Ord(s[i]) xor Ord('#')) |
Re: Zeichen in einem String ersetzen???
Warum es mit Pos langsamer ist, kann man sich doch vorstellen, denn schließlich wird immer wieder der Sting von Anfang an durchsucht, selbst wenn schon ein Teil bearbeitet wurde und das immer wieder.
Delphi-Quellcode:
Das könnte man zwar auch noch auf PChar umstellen, oder wenn man beim String bleiben will, dann ginge auch noch sowas ^^
i := Pos('#', S);
While i > 0 do Begin S[i] := ','; i := PosEx('#', S, i + 1); End;
Delphi-Quellcode:
Für PosEx gibt's ja 2 Versionen in der CodeLib, da es das erst seit D4 gibt.
UniqueString(S);
i := Pos('#', S); While i > 0 do Begin PByte(@S[i])^ := Byte(','); i := PosEx('#', S, i + 1); End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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