![]() |
Stringmanipulation
Hallo,
ich habe einen String nach dem Muster: 'xzahl1xzahl2xzahl3x' usw. Ich möchte alle Zahlen in ein Array speichern und nur die Zahlen, die 'x' sollen verschwinden. Welche Funktion bietet sich dafür an? Danke, Thomas |
Re: Stringmanipulation
Hallo,
in der CodeLibrary findest du eine Funktion namens ![]() ![]() die sollte genau das tun, was du brauchst ;) Trennzeichen wäre in deinem Fall eben das "x". |
Re: Stringmanipulation
Hallo,
schau dir mal ![]() Grüße Edit: Da war einer schneller. |
Re: Stringmanipulation
Man kann auch mit einer TStringList arbeiten.
Dort gibt es "DelimitedText" und "Delimiter". Einfach mal hier suchen mit Suchbegriffen "Delimiter" oder "DelimitedText" oder "TStringList". |
Re: Stringmanipulation
Ok, danke für die Hilfe.
Ich habe aber immer noch einen Fehler im Programm und finde den nicht. :cry: Mein Code sieht so aus. In Datei ist der string mit den Trennzeichen gespeichert und fotonummer ist ein integer arraay, in dem die einzelnen zahlen dann stehen sollen. Wo ist nur der Fehler? procedure TForm1.Umspeichern(Datei: string); var i, zahl: integer; begin Explode( 'x', Datei, 0); for i:=1 to length(ergeb) do begin try fotonummer[i] := strtoint(ergeb[i]); except end; end; for i:=1 to length(fotonummer) do begin showmessage(inttostr(fotonummer[i])); end end; |
Re: Stringmanipulation
Hallo,
Explode ist eine Funktion, keine Prozedur. Im Moment weist du das Ergebnis deines Funktionsaufrufs nirgends zu ;) Soll vermutlich heißen: ergeb := Explode(...) |
Re: Stringmanipulation
Zitat:
Knopf drücken, Code eintippen oder einkopieren, Knopf wieder drücken. Dann wird der Code richtig schön dargestellt. z.B. so:
Delphi-Quellcode:
procedure TFoMain.AcBeendenExecute(Sender: TObject);
begin Self.Close; end; |
Re: Stringmanipulation
Oh, entschuldigung, das habe ich vergessen zu sagen:
Ich habe aus Explode eine Prozedur gemacht und das Ergebnis in einem array ergeb gespeichert: Es sieht ungefähr so aus.
Code:
procedure TForm1.Explode(const Separator, S: string; Limit: Integer = 0); var SepLen: Integer; F, P: PChar; ALen, Index: Integer; begin SetLength(ergeb, 0); if (S = '') or (Limit < 0) then Exit; if Separator = '' then begin SetLength(ergeb, 1); ergeb[0] := S; Exit; end; SepLen := Length(Separator); ALen := Limit; SetLength(ergeb, ALen); Index := 0; P := PChar(S); while P^ <> #0 do begin F := P; P := AnsiStrPos(P, PChar(Separator)); if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F); if Index >= ALen then begin Inc(ALen, 5); SetLength(ergeb, ALen); end; SetString(ergeb[Index], F, P - F); Inc(Index); if P^ <> #0 then Inc(P, SepLen); end; if Index < ALen then SetLength(ergeb, Index); end; |
Re: Stringmanipulation
Naja, der zweite Fehler liegt hier:
Delphi-Quellcode:
Sollte heißen:
for i:=1 to length(ergeb) do begin
Delphi-Quellcode:
Dynamische Arrays beginnen bei 0, nicht bei 1 ;)
for i:=0 to length(ergeb) - 1 do begin
Abgesehen davon sehe ich wenig Sinn darin, aus Explode eine Prozedur zu machen :gruebel: Dann müsstest du s jedenfalls als var-Parameter übergeben, sonst wird das nix! - Käse, s soll ja garnicht verändert werden :roll: Mann - benutz das doch einfach als Funktion... :roll: |
Re: Stringmanipulation
Zitat:
Ist das vielleicht eine globale Variable? Böse! :evil: Warum muss man eigentlich Dinge (Funktionen), die funktionieren immer wieder "vermurksen"? :pale: :? :? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 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