Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Inhalt eines Strings herausschneiden (https://www.delphipraxis.net/22699-inhalt-eines-strings-herausschneiden.html)

dws 21. Mai 2004 20:06


Inhalt eines Strings herausschneiden
 
So habe da noch ein Problem.
Also ich habe einen Variable als String definiert der Inhalt ist z.B.

test#test2#test3

So jetzt möchte ich das ich z.B. in einem Array einzeln test, test2, test3 gespeichert wird also immer den ihnalt zwischen den Rauten.

In PHP geht das ja ganz einfach mit split aber wie ich das mit delphi machen soll habe ich nihct gefunden und wenn dann war mir der Quelltext zu schwer und für mihc nicht nachvollziehbar und da habe ich dann nichts von.


Danke
dws

Pseudemys Nelsoni 21. Mai 2004 20:10

Re: Inhalt eines Strings herausschneiden
 
Delphi-Quellcode:
function Tokenize(s: string; index: integer; sep: char): string;
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  Try
    Repeat
      if Pos(sep, s) <> 0 then
      begin
        sl.Add(Copy(s, 1, Pos(sep, s)-1));
        Delete(s, 1, Pos(sep, s));
      end
      else
      begin
        sl.Add(s);
        s := '';
      end;
    until s = '';
    if index <= sl.Count then
    Result := sl.Strings[index-1]
    else Result := '';
  finally
    sl.Free;
  end;
end;

SirThornberry 21. Mai 2004 20:10

Re: Inhalt eines Strings herausschneiden
 
hab vor paar tagen erst die funktion SplitString gepostet. In dem Thread finden sich auch noch andere Möglichkeiten. Allerdings wird dort nich in ein array gesplittet sondern in eine Stringlist. Aber von ner Stringlist in ein Array zu packen sollte nicht das problem sein...

dws 21. Mai 2004 20:11

Re: Inhalt eines Strings herausschneiden
 
aber geht das nicht einfacher

SirThornberry 21. Mai 2004 20:14

Re: Inhalt eines Strings herausschneiden
 
In php kümmerst du dich doch auch nicht darum was die funktion split machst, warum stört es dich in delphi das es nicht mit 2 Zeilen getan ist? (wenn du mit ner Stringlist arbeitest bringens paar zeilen weniger auch, allerdings macht die Stringliste dann intern auch bissl mehr)

Pseudemys Nelsoni 21. Mai 2004 20:14

Re: Inhalt eines Strings herausschneiden
 
Delphi-Quellcode:
function Tokenize(s: string; index: integer; sep: char): string;
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  Try
    Repeat
      if Pos(sep, s) <> 0 then
      begin
        sl.Add(Copy(s, 1, Pos(sep, s)-1));
        Delete(s, 1, Pos(sep, s));
      end
      else
      begin
        sl.Add(s);
        s := '';
      end;
    until s = '';
    if index <= sl.Count then
    Result := sl.Strings[index-1]
    else Result := '';
  finally
    sl.Free;
  end;
end;

aufrufen kannst du das ja mit

Delphi-Quellcode:
while not (Tokenize(DeinString, Zaehlervariable, '#') = '') do
begin
  ShowMessage(Tokenize(DeinString, Zaehlervariable, '#'));
  inc(Zaehlervariable);
end;

dws 21. Mai 2004 22:08

Re: Inhalt eines Strings herausschneiden
 
achso jetzt habe ich das auch erst verstanden entschuldigung danke

Pseudemys Nelsoni 21. Mai 2004 22:17

Re: Inhalt eines Strings herausschneiden
 
entschuldigung?

dws 23. Mai 2004 19:32

Re: Inhalt eines Strings herausschneiden
 
So der sagt mir jetzt aber bei der function delkleration ein fehler

Code:
[Fehler] MainUnit.pas(335): Ungenügende Forward- oder External-Deklaration: 'TMainForm.Tokenize'
keine ahnung woran das liegen könnte

Ratte 23. Mai 2004 19:40

Re: Inhalt eines Strings herausschneiden
 
Hi,

anstelle vonTMainForm musst du den Namen deiner Form einsetzen.

Ratte

Nikolas 23. Mai 2004 19:43

Re: Inhalt eines Strings herausschneiden
 
steht doch da: Ungenügende Forward- oder External-Deklaration
heisst meisten: Du hast eine funtion/procedure deklariert aber nicht implementiert. Schau mal nach ob du in der ersten Zeile der Implementation einen Schreibfehler hast. Wenn du da den Namen oder die Parameter falsch angibst, bekommst du so einen Fehler.

dws 23. Mai 2004 20:05

Re: Inhalt eines Strings herausschneiden
 
Jo läuft danke

dws 25. Mai 2004 21:27

Re: Inhalt eines Strings herausschneiden
 
So habe es jetzt alles soweit nur ich bekomme das nicht hin die einzelnen datensätze in ein aray zu speichern
habe es damit probiert


Code:
var
  test: string; // da sind die datensätze drin
  test3: Array [1..7] of string;
  count: integer;
  i: integer;
begin

listitem:= ssl_anzeige.Selected;
test:=listitem.Subitems.GetText;
count:=1;
i:=1;

while not (Tokenize(test, count, '#') = '') do
begin
  test3[i]:=(Tokenize(test, count, '#'));
  inc(count);
  i:= i+1;
end;

ssl_VNameedit1.text:= test3[1];
ssl_VNameedit2.text:= test3[2];
ssl_VNameedit3.text:= test3[3];
ssl_VNameedit4.text:= test3[4];
ssl_VNameedit5.text:= test3[5];
ssl_VNameedit6.text:= test3[6];
ssl_VNameedit7.text:= test3[7];
Nur er gibt immer wieder den kompletten datensatz aus.

IngoD7 25. Mai 2004 23:08

Re: Inhalt eines Strings herausschneiden
 
Kann fast nicht sein ...

Die Tokenize-Funktion arbeitet korrekt, und deine While-Schleife zum Füllen des Arrays eigentlich auch (abgesehen davon, dass du dir count oder i sparen könntest - aber das ist egal).

Bist du sicher, dass deine "Inhaltsprüfung" korrekt ist? Eigentlich sollte dein test3-Array korrekt gefüllt sein.

Belege doch dein String test mal händisch mit '123#456#789#abc#def' oder was weiss ich was. Also ohne den Umweg über
Delphi-Quellcode:
listitem:= ssl_anzeige.Selected;
test:=listitem.Subitems.GetText;
Das müsste - wie gesagt - funktionieren.

dws 26. Mai 2004 07:52

Re: Inhalt eines Strings herausschneiden
 
in der vauiable test steht aber genau das drin test#test2#test3.... keine ahnung warum das nicht läuft

dws 26. Mai 2004 07:55

Re: Inhalt eines Strings herausschneiden
 
Wenn ihc das so mache wie oben beschrieben mit

Code:
ShowMessage(Tokenize(DeinString, Zaehlervariable, '#'));
dann schreibt er mir meine enzelnen Datensätze in die message untereinander rein also aus test#test2#test3 wird

test
test2
test3

so zieht dann die message aus
nur eins verstehen ich in diesem quelltext nihct was macht die zählervariable.

Ich habe mal nen test gemacht wenn ihc das so mache wie oben dann setzt er mir wenn er die schleife durchgegangen ist. mein i auf 2 aber die müsste doch viel höher sein oder nicht?

Stevie 26. Mai 2004 08:32

Re: Inhalt eines Strings herausschneiden
 
Wie wär's hiermit? (Oder ist das langsamer?)
Delphi-Quellcode:
type TStringDynArray = array of string; // aus der Unit Types

function Tokenize(Text: string; Delimiter: Char; var Liste: TStringDynArray): string;
var
  StringList: TStringList;
  Count: Integer;
begin
  StringList := TStringList.Create;
  StringList.Delimiter := Delimiter;
  StringList.DelimitedText := Text;
  SetLength(Liste, StringList.Count);
  for Count := 0 to Pred(StringList.Count) do
    Liste[Count] := StringList[Count];
end;

dws 26. Mai 2004 15:33

Re: Inhalt eines Strings herausschneiden
 
und was genau soll die function machen?

Stevie 26. Mai 2004 15:43

Re: Inhalt eines Strings herausschneiden
 
Zitat:

Zitat von dws
und was genau soll die function machen?

Das hier! :wink:
Zitat:

Zitat von dws
So jetzt möchte ich das ich z.B. in einem Array einzeln test, test2, test3 gespeichert wird also immer den ihnalt zwischen den Rauten.


dws 26. Mai 2004 16:51

Re: Inhalt eines Strings herausschneiden
 
Ach wenn das jetzt blöd kommt wie rufe ich die funktion auf?

Ultimator 26. Mai 2004 16:53

Re: Inhalt eines Strings herausschneiden
 
Delphi-Quellcode:
Tokenize('Gerhard;Horst',';', ListBox1)
Denk ich zumindest.

dws 26. Mai 2004 17:06

Re: Inhalt eines Strings herausschneiden
 
ich wollte das in einen array speichern

der macht mir da immer einen fehler
var parameter müssen übereinstimmen

APP 26. Mai 2004 17:12

Re: Inhalt eines Strings herausschneiden
 
Hallo dws,
in der CodeLib gibt es die Funktion Split, als Teil eines Codes, die genau das macht, was Du willst.

dws 26. Mai 2004 17:17

Re: Inhalt eines Strings herausschneiden
 
Also habe das jetzt so gemacht aber es geht nicht

Code:
aArr:= Split(#, test);
Wenn das so überhaupt geht

dws 26. Mai 2004 17:19

Re: Inhalt eines Strings herausschneiden
 
jo habs geht danke danke

APP 26. Mai 2004 17:20

Re: Inhalt eines Strings herausschneiden
 
Hallo dws,
probiere mal so:

Zitat:

Zitat von CodeLib
begin
aArr := Split(s, aSeparator);
aNode := nil;

[EDIT]
OK, zu langsam, ist jetzt halt auf einer neuen Seite :stupid:
[/EDIT]

Stevie 27. Mai 2004 08:43

Re: Inhalt eines Strings herausschneiden
 
Zitat:

Zitat von Ultimator
Delphi-Quellcode:
Tokenize('Gerhard;Horst',';', ListBox1)
Denk ich zumindest.

Seit wann ist ListBox ein String-Array??? :gruebel:
Da kommt eine Variable rein, die so aussieht:
Delphi-Quellcode:
var StringArray: array of string;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 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 by Thomas Breitkreuz