AGB  ·  Datenschutz  ·  Impressum  







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

Zeiger TList

Ein Thema von inriz · begonnen am 18. Okt 2005 · letzter Beitrag vom 21. Okt 2005
Antwort Antwort
Seite 1 von 2  1 2      
inriz

Registriert seit: 18. Okt 2005
15 Beiträge
 
#1

Zeiger TList

  Alt 18. Okt 2005, 13:57
Delphi-Quellcode:
function TForm1.GetTokenList(sCommand, sSeparator : string; tlToken : TListPtr) : Integer;
var
  sTmp : string;
  sCurrentToken : string;
  iPos : Integer;
  iResult : Integer; // anzahl der token
  iRest : Integer;
  pTmp : Pointer;
begin
  iResult := 0;
  sTmp := sCommand;
  
  iPos := Pos(sSeparator, sTmp);
  if iPos > 0 then
  begin
    repeat
      iRest := Length(sTmp) - iPos;

      sCurrentToken := LeftStr(sTmp, iPos - 1); // hier können laufzeitfehler entstehen ...
      pTmp := Pointer(sCurrentToken);
      sTmp := RightStr(sTmp, iRest);
      iPos := Pos(sSeparator, sTmp);
      tlToken.Add(pTmp);
      Inc(iResult);
    until not (iPos > 0);

    if Length(sTmp) > 0 then
    begin
      pTmp := Pointer(RightStr(sTmp, Length(sTmp)));
      tlToken.Add(pTmp);
      Inc(iResult);
    end;
  end;
  Result := iResult;
end;

{ @@@@ Borland kram}

procedure TForm1.BtnGetTokenClick(Sender: TObject);
var
  sStr : string;
  sIndex : Integer;
  lToken : TList;
  iLoop : Integer;
  sToken : string;
  pTmp : Pointer;
begin
  sStr := EdtText.Text;
  lToken := TList.Create;
  
  if Length(sStr) > 0 then
  begin
    sIndex := GetTokenList(sStr, ':', @lToken);
    if sIndex > 0 then
    begin
      for iLoop := 0 to lToken.Count - 1 do
      begin
        pTmp := lToken.Items[iLoop];
        sToken := PChar(pTmp);
        MemResult.Lines.Add(sToken);
      end;
    end;
  end;
end;
hi!

der string der gettokenlist übergeben wird beinhaltet folgenden wert : 12345:foo:bar
die funktion soll nun diesen wert durch den separator : splitter und alle token in eine liste schreiben
diese liste wird als zeiger übergeben ...

das programm lässt sich ausführen, jedoch bekomme ich nicht die werte im memo angezeigt die ich wollte sondern
nur: online
online
onl

könnt ihr mir helfen? welche grundlegenden dinge habe ich bei den zeigeroperationen gemacht?

gruß inriz
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Zeiger TList

  Alt 18. Okt 2005, 14:04
Grundlegend:
1. Du erzeugst mit RightStr einen Substring und meinst, das dieser Speicherbereich nach Verlassen der Prozedure noch gültig ist.

2. Du übergibst die tlList als Pointer, obwohl das unnötig ist.

3. Du hast überlesen, das die Klasse TStringList sowas schon kann.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
inriz

Registriert seit: 18. Okt 2005
15 Beiträge
 
#3

Re: Zeiger TList

  Alt 18. Okt 2005, 14:09
hi,

zu 3: tstringlist hab ich mir gerade angeschaut und das werde ich jetzt auch verwenden!

zu 2: soll ich also in gettokenlist eine tstringlist erstellen und diese dann zurückgeben?
vorab ich komm aus der c welt und bin ein solche vorgehensweise gewohnt
wie stell ich das am besten an?


gruß inriz
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#4

Re: Zeiger TList

  Alt 18. Okt 2005, 14:34
Moin,

ich würd dir raten die StringListe nicht von der procedure erstellen zu lassen, da somit die besitzverhältnisse nicht klar sind. Das würd ich nur tun, wenn du diese procedure ausdrücklich als fabrik-function kennzeichnest, was sich dann im namen widerspiegeln sollte, wie zb. CreateTokenList.

ich würds also so tun:
Delphi-Quellcode:
procedure TForm1.GetTokenList(Command, Separator : string; Tokens : TStrings);
var
  sTmp : string;
  sCurrentToken : string;
  iPos : Integer;
  iResult : Integer; // anzahl der token
  iRest : Integer;
  pTmp : Pointer;
begin
  // erstmal prüfen ob die liste gültig ist
  if not Assigned(Tokens) then
    raise Exception.Create('Tokens must be assigned!');
  // und dann damit arbeiten
  ...
end;

{ @@@@ Borland kram}

procedure TForm1.BtnGetTokenClick(Sender: TObject);
var
  tokens:TStringList;
begin
  tokens:=TStringList.Create;
  try
    // da sparst du dir auch noch jede menge blöd kram ;)
    GetTokenList(Edit1.Text, tokens);
    MemResult.Lines.AddString(Tokens);
  finally
    tokens.free;
  end;
end;

//PS: die nervigen präfixe kannst du in delphi ruhig weglassen, da sie durch die strenge typisierung völlig überflüssig sind. Das ist nur so ne historisch angewohnheit von den c-typen
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Zeiger TList

  Alt 18. Okt 2005, 14:36
Das sieht man, das Du von C kommst
Ich halte es so:
Derjenige, der Unordnung macht, räumt hinterher wieder auf!

Hier also so:
Delphi-Quellcode:
Var
  slToken : TStringlist;

Begin
  slToken := TStringlist.Create;
  Try
    ExtractToken (szInput, slToken);
    ProcessToken (slToken);
  Finally
    slToken.Free;
    End
End;
Ich muss slToken nicht als Pointer übergeben. slToken IST ein Pointer. Sieht zwar nicht so aus, ist aber so. Nennt sich 'Compiler magic'.

--Eben kommt maximov und sagt das Gleiche
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Zeiger TList

  Alt 18. Okt 2005, 15:22
Zitat von maximov:
Moin,
//PS: die nervigen präfixe kannst du in delphi ruhig weglassen, da sie durch die strenge typisierung völlig überflüssig sind. Das ist nur so ne historisch angewohnheit von den c-typen
Nee, würd ich nicht machen. Ich will schon sehen, was das für Variablen sind.
  • f-Felder
    a-Argumente
    i-Integer
    xy-Variable eines TTyps, xy=sl->TStringList etc.

    ProcedureCall (ohne Präfix)

    T-Typendeklaration
    E-Exceptiondeklaration
Was bei Typendeklarationen anfängt, soll doch nicht bei Variablen aufhören, oder?
Aber das ist OT
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#7

Re: Zeiger TList

  Alt 18. Okt 2005, 17:12
Da das thema ja geklärt ist, können wir ruhig OT werden

Zitat von alzaimar:
Zitat von maximov:
Moin,
//PS: die nervigen präfixe kannst du in delphi ruhig weglassen, da sie durch die strenge typisierung völlig überflüssig sind. Das ist nur so ne historisch angewohnheit von den c-typen
Nee, würd ich nicht machen. Ich will schon sehen, was das für Variablen sind.
...
Was bei Typendeklarationen anfängt, soll doch nicht bei Variablen aufhören, oder?
Es sollte generell so sein, dass man entweder genau weiss was für ein type die variable hat, denn das kann man meist aus dem kontext oder anhand schön kurzgehaltener methoden erkenne, oder das man es nicht wissen braucht da sich bei der arbeit mit der variable der typ offensichtlich wird.

Das was bei der typ deklaration anfängt ist heutzutage auch schon wieder geschichte, wenn du da auf das T oder das I ansprichst. In moderneren sprachen wie c# gibt es das T nicht mehr und es ist auch gänzlich überflüssig, da man ja schliesslich weiss wo bei einer deklaration der typ hingehört. Dh. es kann eine variable und einen typ mit dem selben namen geben.

und das ist viel intuitiver und selbsterklärender als hässliche präfixe !BASTA!
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Zeiger TList

  Alt 19. Okt 2005, 21:03
Zitat von maximov:
und das ist viel intuitiver und selbsterklärender als hässliche präfixe !BASTA!
... is ja gut, beruhig dich mal wieder. Meine Meinung: Jedem das Seine. Ich finds hübscher mit Präfixen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#9

Re: Zeiger TList

  Alt 21. Okt 2005, 12:09
Zitat von alzaimar:
Zitat von maximov:
und das ist viel intuitiver und selbsterklärender als hässliche präfixe !BASTA!
... is ja gut, beruhig dich mal wieder. Meine Meinung: Jedem das Seine. Ich finds hübscher mit Präfixen.
NEIN - das kann nicht sein *koch*
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Zeiger TList

  Alt 21. Okt 2005, 12:24
Zitat von maximov:
Zitat von alzaimar:
Zitat von maximov:
und das ist viel intuitiver und selbsterklärender als hässliche präfixe !BASTA!
... is ja gut, beruhig dich mal wieder. Meine Meinung: Jedem das Seine. Ich finds hübscher mit Präfixen.
NEIN - das kann nicht sein *koch*
Ok, Lan: Lass uns vor Tür gehen und klären das wie Männer in Anatol, alem. Holish mein Brüda, alta.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:40 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