![]() |
string durch ; getrennt
Hallo,
ich habe einen String, ich weiß nicht wie lang dieser ist. Dieser String besteht zum Beispiel aus: 1345123515;345235;2352354;23452345; können aber auch Buchstaben sein. Ich möchte jetzt diesen string auslesen. also ohne ; 1345123515 345235 2352354 23452345 so würde ich gerne diesen langen string in meinen 4 Labels augegeben haben. Wieß jemend von euch wie man das macht??? |
Re: string durch ; getrennt
Kuck mal in der Code-Lib nach
![]() |
Re: string durch ; getrennt
hallo,
ich konnte leider nichts finden.kannst du mir trotzdem weiter helfen? |
Re: string durch ; getrennt
luckie meinte ja auch "explode"
|
Re: string durch ; getrennt
Dafür kannst du auch TStringList missbrauchen. Stichwort: Delimiter und DelimiterText.
Das könnte dann z.B. so aussehen...
Delphi-Quellcode:
var
List: TStringList; I: Integer; S: String; begin S := '1345123515;345235;2352354;23452345;'; List := TStringList.Create; try with List do begin Delimiter := ';'; DelimitedText := S; for I := 0 to Count - 1 do ShowMessage(Strings[I]); end; finally List.Free; end; end; |
Re: string durch ; getrennt
Ich weiss ja nicht, wie Borland die StringList-Routinen intern gebaut hat, aber ich würde eher Explode nehmen, da man es nach seinen Bedürfnissen verändern kann. Womöglich ist das mit der Stringlist die elegantere Lösung, aber Explode ist faktisch effektiver.
|
Re: string durch ; getrennt
Hallo Christian,
Einfache Stringverarbeitung: 1. POS - suchen eines Simbols in einem String. Liefert Position(Integer) 2. LEFTSTR - liefert n Zeichen von links 3. RIGHTSTR - das gleiche von rechts 4. LENGTH - liefert Länge eines Strings. Ich hoffe du kannst damit etwas anfangen
Delphi-Quellcode:
Vile Spaß
var
p: Integer; tSpalte: Integer; tZeile: String; begin p := 0; tSpalte := 0; tZeile := Zeile; while p < Length(tZeile) do begin p := pos(';', tZeile); tSpalte := tSpalte + 1; if tSpalte >= Spalte then begin Result := LeftStr(tZeile, p-1); Break; end else tZeile := RightStr(tZeile, length(tZeile)-p); end; end; |
Re: string durch ; getrennt
ExtractStrings funktioniert auch. Ich glaube das wird auch von der TStringList verwendet.
Code:
function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar; Strings: TStrings): Integer;
|
Re: string durch ; getrennt
Gibts aber zumindest bei Delphi5 nicht.
|
Re: string durch ; getrennt
Ich bin schon viel in der VCL rumgekommen, aber eine Methode namens "ExtractStrings" ist mir nie begegnt. Wo ist die denn definiert.
BtW: Im Prinzip sind Explode und ExtractSctring folglich das selbe. |
Re: string durch ; getrennt
Zitat:
Ein Beispiel zum Beweis.
Delphi-Quellcode:
Mit TStringList ist das ganze so 150 mal schneller auf meinem PC.
{--------------------------------------------------------------------------------------------------}
procedure TForm1.Button1Click(Sender: TObject); var S: String; I: Integer; List: TStringList; Start, Stop, Frequenzy: Int64; begin for I := 1 to 10000 do S := S + '0123456789;'; QueryPerformanceFrequency(Frequenzy); QueryPerformanceCounter(Start); List := TStringList.Create; try List.Delimiter := ';'; List.DelimitedText := S; QueryPerformanceCounter(Stop); ShowMessage(FormatFloat('0.00', (Stop - Start) * 1000 / Frequenzy) + ' Millisekunden'); finally List.Free; end; end; {--------------------------------------------------------------------------------------------------} procedure TForm1.Button2Click(Sender: TObject); var S: String; I: Integer; StrArry: TStringDynArray; Start, Stop, Frequenzy: Int64; begin for I := 1 to 10000 do S := S + '0123456789;'; QueryPerformanceFrequency(Frequenzy); QueryPerformanceCounter(Start); StrArry := Explode(';', S); QueryPerformanceCounter(Stop); ShowMessage(FormatFloat('0.00', (Stop - Start) * 1000 / Frequenzy) + ' Millisekunden'); end; {--------------------------------------------------------------------------------------------------} |
Re: string durch ; getrennt
Mit "faktisch effektiver" meinte ich ja nicht die Geschwindigkeit, sonder die möglichkeit des Users mit eigenem Code die Funktion seinen Bedürfnissen entsprechend anzupassen, ohne Borland nach den VCL-Sourcen beknieen zu müssen.
|
Re: string durch ; getrennt
|
Re: string durch ; getrennt
Darüber reden wir die ganze Zeit.
|
Re: string durch ; getrennt
Delphi-Quellcode:
bei mier funktioniert es! muss nur in die funktion deinen string, dein trennzeichen einsetzen
function countchar(s,signe:string):integer;
var I:integer; begin for I:=1 to length(s) do if s[I]=signe then result:=result+1; end; function extraction(s,signe:string;n:integer):string; var I:Integer; begin for I:=1 to n-1 do begin delete(s,1,pos(signe,s)); end; if pos(signe,s) > 0 then result:=copy(s,1,pos(signe,s)-1) else result:=s; end; nacher deine Funktion mit einer for schleife auffrugen
Delphi-Quellcode:
müsste theoretisch funktionnieren
for I:=1 to countchar('deine string','deinetrenzeiche') do
begin lb.items.append(extraction('deine string','deinetrenzeiche',I); end; |
Re: string durch ; getrennt
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 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