Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Stringmanipulation (https://www.delphipraxis.net/116574-stringmanipulation.html)

violinenspieler1000 2. Jul 2008 13:12


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

Meflin 2. Jul 2008 13:16

Re: Stringmanipulation
 
Hallo,

in der CodeLibrary findest du eine Funktion namens Hier im Forum suchenExplode.
http://www.delphipraxis.net/internal...ect.php?t=3816

die sollte genau das tun, was du brauchst ;)

Trennzeichen wäre in deinem Fall eben das "x".

Matze 2. Jul 2008 13:16

Re: Stringmanipulation
 
Hallo,

schau dir mal ExplodeExplode an. Da kannst du ein Trennzeichen angeben, bei denen der String aufgeteilt wird (hier: x). Die Teilstrings landen dann jeweils in einem Array-Eintrag.

Grüße

Edit: Da war einer schneller.

RavenIV 2. Jul 2008 13:32

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".

violinenspieler1000 2. Jul 2008 13:43

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;

Meflin 2. Jul 2008 13:45

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(...)

RavenIV 2. Jul 2008 13:58

Re: Stringmanipulation
 
Zitat:

Zitat von violinenspieler1000
Mein Code sieht so aus.

Beim erstellen oder bearbeuten eines Beitrags gibt es ziemlich oben in der Mitte einen Knopf "Delphi-Code".
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;

violinenspieler1000 2. Jul 2008 14:07

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;

Meflin 2. Jul 2008 14:10

Re: Stringmanipulation
 
Naja, der zweite Fehler liegt hier:
Delphi-Quellcode:
for i:=1 to length(ergeb) do begin
Sollte heißen:
Delphi-Quellcode:
for i:=0 to length(ergeb) - 1 do begin
Dynamische Arrays beginnen bei 0, nicht bei 1 ;)

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:

RavenIV 2. Jul 2008 14:10

Re: Stringmanipulation
 
Zitat:

Zitat von violinenspieler1000
Oh, entschuldigung, das habe ich vergessen zu sagen:

Ich habe aus Explode eine Prozedur gemacht und das Ergebnis in einem array ergeb gespeichert:

Ich seh die Deklaration des arrays nicht.
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 00:33 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf