AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kommastellen löschen

Ein Thema von UnixX · begonnen am 25. Sep 2009 · letzter Beitrag vom 13. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
UnixX

Registriert seit: 26. Jul 2003
Ort: Unknown
25 Beiträge
 
FreePascal / Lazarus
 
#1

Kommastellen löschen

  Alt 25. Sep 2009, 19:57
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!
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: Kommastellen löschen

  Alt 25. Sep 2009, 20:11
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);
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Kommastellen löschen

  Alt 25. Sep 2009, 20:12
-Liste Trennen ( StringList.Commatext, Explode)
-ab Index 3 wieder Zusammenfügen
Markus Kinzler
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Kommastellen löschen

  Alt 25. Sep 2009, 20:14
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
Klaus
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: Kommastellen löschen

  Alt 25. Sep 2009, 20:21
hehe, mkinzler zu überholen ist schon eine Kunst. Jetzt 5 Min. länger Zeit, deshalb :

machs besser so :

Delphi-Quellcode:
for i := 1 to 3 do
  delete (st,1,pos (',',st));
Gruß
Hansa
  Mit Zitat antworten Zitat
UnixX

Registriert seit: 26. Jul 2003
Ort: Unknown
25 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Kommastellen löschen

  Alt 25. Sep 2009, 20:49
Geil es funktioniert!!!

Vielen Dank an Hansa!!!
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Kommastellen löschen

  Alt 25. Sep 2009, 21:26
Es gibt da die wunderhübsche Funktion StrToken (aus der JCL):
Delphi-Quellcode:
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;
Wenn man die dreimal aufruft, hat man das gleiche Ergebnis.
for i := 1 to 3 do StrToken(st, ','); Das Gute daran ist, dass man StrToken() bei vielen Gelegenheiten gut gebrauchen kann.
fork me on Github
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Kommastellen löschen

  Alt 25. Sep 2009, 22:07
Oh je. Wegen StrToken die JCL mitlinken ? Was heisst StrToken überhaupt ? 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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Kommastellen löschen

  Alt 26. Sep 2009, 11:25
Zitat von Hansa:
Oh je. Wegen StrToken die JCL mitlinken ? Was heisst StrToken überhaupt ? 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.
Es geht doch nicht um Lines of Code sondern um einen Blick über den Tellerrand.
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:
s := 'Audi,Mazda,BMW,Opel';
writeln(StrToken(s,',')); // liefert: Audi
writeln(StrToken(s,',')); // liefert: Mazda
Übrigens: Das Linken mit der JCL vergrössert die EXE nur um die Funktionen, die auch benützt werden.
fork me on Github
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Kommastellen löschen

  Alt 26. Sep 2009, 13:51
Moin Zusammen,

ich möchte auch noch auf PosEx hinweisen:

Delphi-Quellcode:
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;
Sollte Delphi 6 PosEx noch nicht kennen (Unit StrUtils), habe ich hier noch eine abgespeckte Version:

Delphi-Quellcode:
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;
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.
Bevor noch jemand meckert, dass nicht geprüft wird, ob AsSeparator leer ist: Das macht PosEx auch nicht anders
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 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