AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

funktion explode?

Ein Thema von paulus11 · begonnen am 20. Feb 2010 · letzter Beitrag vom 21. Feb 2010
Antwort Antwort
paulus11

Registriert seit: 20. Feb 2010
8 Beiträge
 
#1

funktion explode?

  Alt 20. Feb 2010, 12:56
Hallo liebe Delphi-Prax'ler

ich hätte einmal eine Frage zu der Funktion "explode" mit diesem Quelltext:

Delphi-Quellcode:
Function explode(const Separator,S: string;Limit:Integer = 6):TStringDynArray;
var SepLen: Integer;
F, P:PChar;
ALen, Index: Integer;
Begin
  SetLength(result,0);
  If (S='') or(Limit<0) then Exit;
  If Separator=''Then
  Begin
    SetLength(Result,1);
    Result[0]:=S;
    Exit;
  End;
  SepLen:=Length(Separator);
  Alen:=Limit;
  SetLength(Result,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(Result,Alen);
    end;
    SetString(Result[Index],F,P-F);
    Inc(Index);
    if p^ <>#0 then inc(p, seplen);
    end;
    if index < Alen Then Setlength(Result,Index);
End;
Ein Freund hatte mir gesagt, das dabei Zeichenketten in ein dynamisches String-Array aufgeteilt werden.

Doch was heißt das jetzt genau? Was macht die Funktion im Allgemeinen?

Ich weiß nicht ob ihr dafür Zeit habt,
aber würde mir jemand vielleicht sogar erklären was in jeder Zeile bzw. in den jeweiligen Abschnitten so ungefähr abläuft?

Das würde mir wirklich sehr weiterhelfen.
Ich hoffe es findet sich jemand, der so nett ist.

Liebe Grüße

[edit=mkinzler]Code-Tag durch Delphi-Tag ersetzt Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#2

Re: funktion explode?

  Alt 20. Feb 2010, 13:16
Wenn man den Anfangskommentar der Funktion nicht gelöscht hätte, dann sollte man eigentlich rausbekommen, was diese Funktion macht.
siehe: http://www.delphipraxis.net/internal...ect.php?t=3816

Zitat:
function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray; Explode trennt S in die durch Separator getrennten Elemente auf.
Und was in jeder Zeile passiert ... ich dachte das erkennt man, wenn man sich den jeweiligen Befehl ansieht und weiß was er macht? (notfalls steht dieses auch nochmals in der OH)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#3

Re: funktion explode?

  Alt 21. Feb 2010, 01:02
statisches Array: Feste Größe, kann in der Größe nicht verändert werden. Anfangs- und Endindizes können manuell eingestellt werden
Dynamisches Array: Variable/Dynamische Größe, kann verändert werden. (Als Beispiel können hier Strings angeführt werden). Anfangsindex: 0, Endindex: Größe -1

Bernhard

PS: Der Code verwendet für eine schnellere Ausführzeit Pointer-Typen. Somit ist diese Funktion gar nicht auf ein Anfänger-Level runterbrechbar.
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

Re: funktion explode?

  Alt 21. Feb 2010, 07:08
Mit dem einem PChar wird hier aber auch sehr sanft umgegangen und es gibt keine wilden/unüberschaubaren Berechnungen oder Kopieraktionen ala Delphi-Referenz durchsuchenMove/Delphi-Referenz durchsuchenMoveMemory damit.

Ein sehr großer Teil dieser Funktion läßt sich eigentlich gut selbererklären und mit F1 sollten sich viele Unklarheiten ausgelöschen lassen.

Wenn jemand bei einem der Befehle/Codezeilen Probleme hat, dann kann derjenige/diejenige auch gern geziehlt danach fragen, aber eine alle Befehler/Zeilen einer einfachen Funktion zu kommentieren, abgesehn davon, daß es unübersichtlich wird ... dafür hab ich dann auch nicht wirklich Lust und Zeit (tut mir ja auch etwas Leid, aber ein bissl Eigeninitiative darf ich doch vor voraussetzen können)


- PChar ist ein Zeiger auf ein Zeichen, z.B. innerhalb eines Strings
- meißten wird auf das erste Zeichen gezeigt, was dann sozusagen einen Zeiger auf den ganzen String ergibt
- das Zeichen #0 ist bei PChar das Ende-Zeichen

- ja und hier wird der Zeiger jeweils auf den Stringanfang und von Delphi-Referenz durchsuchenAnsiStrPos auf das erste Zeichen eines dem Suchmusters entsprechenden Textteiles gesetzt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:57 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