Kommastellen löschen
Hallo!
Kann mir jemand helfen? Ich habe folgendes vor. Ich möchte mehrere Kommastellen aus einer Zeile löschen und zwar die ersten drei. Ein Beispiel: 6782,237,3489,34576,346539,34566,345,34,534 Daraus soll werden das: 34576,346539,34566,345,34,534 Danke im voraus für eure Hilfe! |
Re: Kommastellen löschen
for-Schleife über den string (st). Bis 3 zählen (pro komma i := i +1) und bei jedem Komma um eins hochzählen.
Delphi-Quellcode:
for i := 1 to dritteskomma do
delete (st,1,dritteskomma); |
Re: Kommastellen löschen
-Liste Trennen ( StringList.Commatext, Explode)
-ab Index 3 wieder Zusammenfügen |
Re: Kommastellen löschen
Guten Abend,
Du möchtest die ersten 3 Zahlen löschen. mit pos() kannst Du die Kommastellen feststellen immer eine nach der anderen. Wenn Du das 3. Komma gefunden hast die Position merken und dann mit copy() und/oder delete() arbeiten. Hilfe zu den Kommados findest Du in der Delphi-Hilfe. Grüße Klaus |
Re: Kommastellen löschen
hehe, mkinzler zu überholen ist schon eine Kunst. :mrgreen: Jetzt 5 Min. länger Zeit, deshalb :
machs besser so :
Delphi-Quellcode:
for i := 1 to 3 do
delete (st,1,pos (',',st)); |
Re: Kommastellen löschen
Geil es funktioniert!!! :bounce2:
Vielen Dank an Hansa!!! |
Re: Kommastellen löschen
Es gibt da die wunderhübsche Funktion StrToken (aus der JCL):
Delphi-Quellcode:
Wenn man die dreimal aufruft, hat man das gleiche Ergebnis.
function StrToken(var S: string; Separator: Char): string;
var I: Integer; begin I := Pos(Separator, S); if I <> 0 then begin Result := Copy(S, 1, I - 1); Delete(S, 1, I); end else begin Result := S; S := ''; end; end;
Delphi-Quellcode:
Das Gute daran ist, dass man StrToken() bei vielen Gelegenheiten gut gebrauchen kann.
for i := 1 to 3 do StrToken(st, ',');
|
Re: Kommastellen löschen
Oh je. Wegen StrToken die JCL mitlinken ? Was heisst StrToken überhaupt ? :shock: Für Puristen : man beachte einmal die 16 Zeilen (brutto, also mit Kopf etc.) und meine zwei (nur delete). Reiche das mal besser an die Jedis weiter. :mrgreen:
|
Re: Kommastellen löschen
Zitat:
Sollte man StrToken() in einem Programm mehr als einmal einsetzen können, dann hat es sich doch schon gelohnt. Der Programmcode wird lesbarer und verständlicher. StrToken liefert pro Aufruf ein Token zurück und verkürzt den Orginalstring um dieses:
Delphi-Quellcode:
Übrigens: Das Linken mit der JCL vergrössert die EXE nur um die Funktionen, die auch benützt werden.
s := 'Audi,Mazda,BMW,Opel';
writeln(StrToken(s,',')); // liefert: Audi writeln(StrToken(s,',')); // liefert: Mazda |
Re: Kommastellen löschen
Moin Zusammen,
ich möchte auch noch auf PosEx hinweisen:
Delphi-Quellcode:
Sollte Delphi 6 PosEx noch nicht kennen (Unit StrUtils), habe ich hier noch eine abgespeckte Version:
var
sValue : string; iPos : Integer; i : Integer; begin sValue := '6782,237,3489,34576,346539,34566,345,34,534'; iPos := Pos(',',sValue); for i := 1 to 2 do begin iPos := PosEx(',',sValue,iPos+1); end; sValue := Copy(sValue,iPos+1,MaxInt); ShowMessage(sValue); end;
Delphi-Quellcode:
Abgespeckt meint hier übrigens, dass nur auf ein Zeichen geprüft wird, nicht auf einen Substring, was aber für den gewünschten Anwendungsfall ausreicht.
function csPosEx(const AsSeparator : string;const AsValue : string;const AiStart : Integer) : Integer;
var iPos : Integer; iLen : Integer; begin if AiStart <= 0 then begin Result := Pos(AsSeparator,AsValue); end else begin iPos := AiStart; iLen := Length(AsValue); while iPos <= iLen do begin if AsValue[iPos] = AsSeparator[1] then begin Result := iPos; Exit; end; Inc(iPos); end; Result := 0; end; end; Bevor noch jemand meckert, dass nicht geprüft wird, ob AsSeparator leer ist: Das macht PosEx auch nicht anders ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:42 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