![]() |
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 ![]()
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 10:21 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