Delphi-PRAXiS

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 12: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 12: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 12: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 12: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 12: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 12: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 12: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 13: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 13: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 13: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: :? :?

Sherlock 2. Jul 2008 13:31

Re: Stringmanipulation
 
Zitat:

Zitat von violinenspieler1000
Ich habe aber immer noch einen Fehler im Programm und finde den nicht. :cry:
.
.
.
Wo ist nur der Fehler?

Schau mal: So eine Aussage ist nicht sehr hilfreich, denn man muss raten, was denn wohl falsch sein könnte. Klar, es gibt mittlerweile einige :glaskugel:-Experten hier im Forum, die können so etwas ganz gut. Aber wenn Du wenigstens sagen könntest, ob das Programm zwar grundsätzlich läuft, aber die Ausgabe nicht wie erwartet ist, oder ob das Programm gar nicht erst kompiliert, und Delphi die Fehlermeldung XY dazu abgibt, dann wäre das eine enorme Hilfe, auch für die weniger versierten Rateexperten. Wenn Du eine große Benutzergruppe von der Hilfesuche ausschließt, dann versagst Du Dir schnelle Problemlösungen.

Tut mir Leid, für den Ausflug ins OT, aber das musste Dir mal gesagt werden, Du bist ja noch nicht lange dabei.

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 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