Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi string durch ; getrennt (https://www.delphipraxis.net/29379-string-durch-%3B-getrennt.html)

Christian18 8. Sep 2004 13:39


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???

Luckie 8. Sep 2004 13:39

Re: string durch ; getrennt
 
Kuck mal in der Code-Lib nach expodeexpode.

Christian18 8. Sep 2004 13:46

Re: string durch ; getrennt
 
hallo,

ich konnte leider nichts finden.kannst du mir trotzdem weiter helfen?

ibp 8. Sep 2004 13:48

Re: string durch ; getrennt
 
luckie meinte ja auch "explode"

Sprint 8. Sep 2004 13:56

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;

Dax 8. Sep 2004 13:58

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.

Pauli 8. Sep 2004 13:59

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:
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;
Vile Spaß

LarsMiddendorf 8. Sep 2004 14:04

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;

Chewie 8. Sep 2004 14:06

Re: string durch ; getrennt
 
Gibts aber zumindest bei Delphi5 nicht.

Dax 8. Sep 2004 14:06

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.

Sprint 8. Sep 2004 14:43

Re: string durch ; getrennt
 
Zitat:

Zitat von Dax
aber Explode ist faktisch effektiver.

Ja? Aber nicht bei der Geschwindigkeit!

Ein Beispiel zum Beweis.

Delphi-Quellcode:
{--------------------------------------------------------------------------------------------------}

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;

{--------------------------------------------------------------------------------------------------}
Mit TStringList ist das ganze so 150 mal schneller auf meinem PC.

Dax 8. Sep 2004 15:05

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.

yankee 11. Sep 2004 12:35

Re: string durch ; getrennt
 
Du suchst nach dem hier:
Explode

Dax 11. Sep 2004 12:37

Re: string durch ; getrennt
 
Darüber reden wir die ganze Zeit.

WhatAmI 11. Sep 2004 13:39

Re: string durch ; getrennt
 
Delphi-Quellcode:
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;
bei mier funktioniert es! muss nur in die funktion deinen string, dein trennzeichen einsetzen

nacher deine Funktion mit einer for schleife auffrugen
Delphi-Quellcode:
for I:=1 to countchar('deine string','deinetrenzeiche') do
  begin
    lb.items.append(extraction('deine string','deinetrenzeiche',I);
  end;
müsste theoretisch funktionnieren

yankee 11. Sep 2004 22:46

Re: string durch ; getrennt
 
Zitat:

Zitat von Dax
Darüber reden wir die ganze Zeit.

Ja ach, aber darf ich dich an:
Zitat:

Zitat von Christian18
ich konnte leider nichts finden.kannst du mir trotzdem weiter helfen?

erinnern? Hatte ja wohl keiner einen plan, wo es ist!


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