![]() |
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 |
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; |
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...
|
Re: Inhalt eines Strings herausschneiden
aber geht das nicht einfacher
|
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)
|
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; |
Re: Inhalt eines Strings herausschneiden
achso jetzt habe ich das auch erst verstanden entschuldigung danke
|
Re: Inhalt eines Strings herausschneiden
entschuldigung?
|
Re: Inhalt eines Strings herausschneiden
So der sagt mir jetzt aber bei der function delkleration ein fehler
Code:
keine ahnung woran das liegen könnte
[Fehler] MainUnit.pas(335): Ungenügende Forward- oder External-Deklaration: 'TMainForm.Tokenize'
|
Re: Inhalt eines Strings herausschneiden
Hi,
anstelle vonTMainForm musst du den Namen deiner Form einsetzen. Ratte |
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. |
Re: Inhalt eines Strings herausschneiden
Jo läuft danke
|
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:
Nur er gibt immer wieder den kompletten datensatz aus.
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]; |
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:
Das müsste - wie gesagt - funktionieren.
listitem:= ssl_anzeige.Selected;
test:=listitem.Subitems.GetText; |
Re: Inhalt eines Strings herausschneiden
in der vauiable test steht aber genau das drin test#test2#test3.... keine ahnung warum das nicht läuft
|
Re: Inhalt eines Strings herausschneiden
Wenn ihc das so mache wie oben beschrieben mit
Code:
dann schreibt er mir meine enzelnen Datensätze in die message untereinander rein also aus test#test2#test3 wird
ShowMessage(Tokenize(DeinString, Zaehlervariable, '#'));
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? |
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; |
Re: Inhalt eines Strings herausschneiden
und was genau soll die function machen?
|
Re: Inhalt eines Strings herausschneiden
Zitat:
Zitat:
|
Re: Inhalt eines Strings herausschneiden
Ach wenn das jetzt blöd kommt wie rufe ich die funktion auf?
|
Re: Inhalt eines Strings herausschneiden
Delphi-Quellcode:
Denk ich zumindest.
Tokenize('Gerhard;Horst',';', ListBox1)
|
Re: Inhalt eines Strings herausschneiden
ich wollte das in einen array speichern
der macht mir da immer einen fehler var parameter müssen übereinstimmen |
Re: Inhalt eines Strings herausschneiden
Hallo dws,
in der CodeLib gibt es die Funktion ![]() |
Re: Inhalt eines Strings herausschneiden
Also habe das jetzt so gemacht aber es geht nicht
Code:
Wenn das so überhaupt geht
aArr:= Split(#, test);
|
Re: Inhalt eines Strings herausschneiden
jo habs geht danke danke
|
Re: Inhalt eines Strings herausschneiden
Hallo dws,
probiere mal so: Zitat:
OK, zu langsam, ist jetzt halt auf einer neuen Seite :stupid: [/EDIT] |
Re: Inhalt eines Strings herausschneiden
Zitat:
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