AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Idee gesucht: Mehrere Daten mit Funktion zurückgeben
Thema durchsuchen
Ansicht
Themen-Optionen

Idee gesucht: Mehrere Daten mit Funktion zurückgeben

Ein Thema von Andreas L. · begonnen am 28. Nov 2006 · letzter Beitrag vom 29. Nov 2006
Antwort Antwort
Seite 2 von 2     12   
Thorben_K

Registriert seit: 22. Okt 2006
Ort: Darmstadt
105 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Idee gesucht: Mehrere Daten mit Funktion zurückgeben

  Alt 29. Nov 2006, 13:46
Delphi-Quellcode:

type

  TMyRec = record
    FName: ShortString;
  end;

TMyArray : Array of TMyRec;
geht so einfach, mit SetLenght kannst du das array erweitern, du sollest aber mal überlegen ob die in deinem fall nicht eine TList anbietet

zu deiner 2. frage, wie es bei neuen compilern ist weiss ich nichts, aber bei älteren müssen string eine zeichenangabe haben, zumindest wenn du sie auch mal speichern willst
Thorben
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#12

Re: Idee gesucht: Mehrere Daten mit Funktion zurückgeben

  Alt 29. Nov 2006, 17:16
Hmm... irgendwas klappt noch nicht ganz:

Delphi-Quellcode:
for Line := 0 to Cookies.Count -1 do
    begin

     if pos(Domain, Cookies.Strings[Line]) > 0 then
      begin

       SetLength(tempcookies, Length(tempcookies) + 1);
       tempcookies[Length(tempcookies)] := CreateMozCookie(Cookies.Strings[Line]);

      end;
    end;
Cookies = stringlist
tempcookies = TMozCookies
CreateMozCookie() gibt ein TMozCookie zurück
Delphi-Quellcode:
type
  TMozCookie = record
      Domain: String;
      WholeDomain: Boolean;
      Path: String;
      Secure: Boolean;
      Expires: TDate;
      Name: String;
      Value: String;
  end;

  TMozCookies = array of TMozCookie;
Also TMozCookie ist ein Cookie (als record) und TMozCookies ist ein Array mit mehreren TMozCookie.

Ich versuche also mit

tempcookies[Length(tempcookies)] := CreateMozCookie(Cookies.Strings[Line]); mehrere TMozCookie in das Array zu schreiben.

Ich habe die Anwendung schon mit F7 durch gemacht. Direkt wenn die Funktion CreateMozCookie durch ist kommt eine AV. Der Cursor im Editor bleibt auf dem letzten end; stehen. Ich denke es hat was mit der Zuweisung des MozCookie an das Array zu tun. Ich weiß leider nicht weiter. Hat da jemand Ahnung?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#13

Re: Idee gesucht: Mehrere Daten mit Funktion zurückgeben

  Alt 29. Nov 2006, 17:21
Falsch:
Delphi-Quellcode:
   SetLength(tempcookies, Length(tempcookies) + 1);
   // nach SetLength ändert sich ja auch das Ergebnis von Length(tempcookies)
   tempcookies[Length(tempcookies)] := CreateMozCookie(Cookies.Strings[Line]);
Richtig:
Delphi-Quellcode:
   len := Length(tempcookies)
   SetLength(tempcookies, len + 1);
   tempcookies[len] := CreateMozCookie(Cookies.Strings[Line]);
Andreas
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#14

Re: Idee gesucht: Mehrere Daten mit Funktion zurückgeben

  Alt 29. Nov 2006, 17:38
Zitat von shmia:
Falsch:
Delphi-Quellcode:
   SetLength(tempcookies, Length(tempcookies) + 1);
   // nach SetLength ändert sich ja auch das Ergebnis von Length(tempcookies)
   tempcookies[Length(tempcookies)] := CreateMozCookie(Cookies.Strings[Line]);
Richtig:
Delphi-Quellcode:
   len := Length(tempcookies)
   SetLength(tempcookies, len + 1);
   tempcookies[len] := CreateMozCookie(Cookies.Strings[Line]);
Hi,
das len sollte durch Compileroptimierung eher überflüssig sein (behaupte ich einfach mal).
An sich gilt für dyn. Arrays immer, dass die null indexiert sind, also der erste Wert an der Stelle 0 steht und der letzte an der Stelle length(Array) - 1. Du kannst aber auch einfach low und high verwenden.
Arrays um ein Element zu vergrößern ist immer gaaanz schlecht. Ist zwar durchaus möglich, aber dabei wird der Speicher für das neue Array reserviert, das alte Array dort rein kopiert und dann das alte Array frei gegeben. Das ganze sind die Kosten für ein weiteres Element. Kommt ein zweites hinzu, musst du wieder diese Schritte vornehmen.
Besser ist es da, wenn du das Array gleich um mehr als ein Element vergrößerst. Der Zeitbedarf für das allozieren von Speicher und dem kopieren eines Arrays ist für eine große Anzahl von Elementen nahezu gleich dem Zeitaufwand für ein Element. Allozierst du aber gleich den Speicher für 100 Elemente, so sind die Kosten pro neuem Element nur noch bei einem 100stel der Kosten für nur ein Element. Hundert ist dabei keineswegs die optimale zahl.
In einem der (noch recht aktuellen) Threads wurde von alzaimar (u.A.!) gesagt, dass die Verdopplung der größe ein recht guter Wert ist. Du musst dir dann halt nur in einer weiteren Variable den Index des tatsächlich letzten verwendeten Elements merken.
Alternativ kannst du auch eine TList einsetzen, die macht intern fast das gleiche (nur eben nicht verdoppeln). Eine TList wächst dabei dyn., verwendet zwar auch ein Array, aber das bleibt für dich transparent.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#15

Re: Idee gesucht: Mehrere Daten mit Funktion zurückgeben

  Alt 29. Nov 2006, 18:49
Jetzt klappt alles.

Vielen Dank euch allen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 02:14 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