AGB  ·  Datenschutz  ·  Impressum  







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

TStringlist leert sich Selbst!

Ein Thema von danu1104 · begonnen am 7. Mär 2012 · letzter Beitrag vom 8. Mär 2012
Antwort Antwort
Seite 1 von 3  1 23      
danu1104

Registriert seit: 4. Dez 2006
75 Beiträge
 
Delphi 2006 Personal
 
#1

TStringlist leert sich Selbst!

  Alt 7. Mär 2012, 19:33
Delphi-Version: 7
Hallo

Ich versuche seit stunden ,eine einfache TStringlist mit einfachen Strings zu füllen, doch bereits nach dem Add() eine zeile darunter ist die Liste wieder leer , obwohl ich überhaupt nix leere.


Delphi-Quellcode:
var
varvalue:TStringlist;
varvalueex:TStringlist;

function getvarval(str:Pchar):Pchar;
var ic:Integer;
begin
  varvalue.LoadFromFile('c:\ls.dat');
  varvalueex.DelimitedText:= varvalue.text;
  for ic:=0 to varvalueex.Count -1 do
   if VarValueex.Strings[ic] = str then Begin
    result:=Pchar(VarValueex.Strings[ic+1]);
    Break;
   end;
   showmessage(VarValueEx.Text)
end;

 VarValue:=TStringlist.Create;

 VarValueEx:=TStringlist.Create;
 VarValueEx.Delimiter:='=';

  varvalue.Add('test=hallo');
// und hier ist sie wieder leer ich weiss es nicht zuletzt weil ls.dat 0KB gross ist.
// Achja, dass Project Ist eine DLL
  varvalue.SaveToFile('c:\ls.dat');
Ich würde mich freuen , wenn mir mal jemand in den nacken kloppt, und mir zeigt was ich falsch mache, weil ich weiß nicht mehr was logic ist.

PS: Habe einen EStringlistError mit

Delphi-Quellcode:
 
try
 test() ....
except
  On e : EStringlistError do

     //

  Else

     //


 end;
abgefangen. weil der error meine app ewig crasht ,selbst nach aufräumen des codes, weshalb auch immer. Die listen werden allle vernüftig erstellt und wieder geschlossen von mir.
Daniel

Geändert von danu1104 ( 7. Mär 2012 um 19:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#2

AW: TStringlist leert sich Selbst!

  Alt 7. Mär 2012, 19:40
PS: Habe einen EStringlistError mit

Delphi-Quellcode:
 
try
 test() ....
except
  On e : EStringlistError do

     //

  Else

     //


 end;
abgefangen. weil der error meine app ewig crasht und ich nach aufräumen des codes immer noch habe, weshalb auch immer. Die listen werden allle vernüftig erstellt und wieder geschlossen.
Das ist ja wohl seit mit das Dümmste, was ich je gehört habe! Der Fehler ruft dir sozusagen zu Hier bin ich! und du hörst nicht hin...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
danu1104

Registriert seit: 4. Dez 2006
75 Beiträge
 
Delphi 2006 Personal
 
#3

AW: TStringlist leert sich Selbst!

  Alt 7. Mär 2012, 19:43
PS: Habe einen EStringlistError mit

Delphi-Quellcode:
 
try
 test() ....
except
  On e : EStringlistError do

     //

  Else

     //


 end;
abgefangen. weil der error meine app ewig crasht und ich nach aufräumen des codes immer noch habe, weshalb auch immer. Die listen werden allle vernüftig erstellt und wieder geschlossen.
Das ist ja wohl seit mit das Dümmste, was ich je gehört habe! Der Fehler ruft dir sozusagen zu Hier bin ich! und du hörst nicht hin...
Ich habe den fehler hoch und runter gesucht , ich habe ihn nicht gefunden auch nach hilfe im web (http://www.umnicom.de/Software/Delph...xceptions.html) nicht.

Zitat:
EStringListError

EStringListError ist die Exception-Klasse für ungültige Referenzen auf Listenfelder.

Unit: classes

Beschreibung

EStringListError wird ausgelöst, wenn eine Anwendung versucht, mit einem ungültigen Index auf ein Listenfeld zuzugreifen, um beispielsweise einen Eintrag hinzuzufügen.
Und der code ist nicht gross. Also habe ich ihn unterdrückt damit das Programm wieder läuft
Daniel

Geändert von danu1104 ( 7. Mär 2012 um 19:46 Uhr)
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: TStringlist leert sich Selbst!

  Alt 7. Mär 2012, 19:53
Hallo

Delphi-Quellcode:
  for ic:=0 to varvalueex.Count -1 do
    if VarValueex.Strings[ic] = str then Begin
     result:=Pchar(VarValueex.Strings[ic+1]); //***
//***--> kann beim letzten Element durch das +1 nicht gutgehen

Gruß Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.292 Beiträge
 
Delphi 12 Athens
 
#5

AW: TStringlist leert sich Selbst!

  Alt 7. Mär 2012, 19:55
Hallo... ist der Quelltext aus #1 alles ? Zeige mal ein wenig mehr... Der Ausschnitt sagt gar nix.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TStringlist leert sich Selbst!

  Alt 7. Mär 2012, 23:31
Ja, Fehlermeldungen sollte man gefälligst beachten.
Wenn man die einfach so mutwillig/fahrlässig misachtet, dann soll man sich auch nicht Wundern, wenn es irgendwo knallt.

Was saggt denn der Debugger?
Ich empfehle auch einen Blick in das Menü "Start" und dort in Parameter.



Delphi-Quellcode:
function getvarval(str:Pchar):Pchar;
begin

    result:=Pchar(VarValueex.Strings[ic+1]);

end;
Und ich empfehle dir ganz dringend ein Tutorial über Pointer.

Daß es bei der TStringList nicht sofort knallt, ist ein Zufall und auf Grund der internen Speicherverwaltung der TStringList begründet.
Aber eigentlich sollte man besser keinen Pointer auf etwas zurückgeben, was nach der Funktion nicht mehr existieren könnte, wie z.B. eine Stringvariable.


Anhand des bissl veröffentlichten Codes (man soll ja schließlich alles Wichtige zeigen, also kann da nichts Wichtiges uns Unbekanntes mehr existieren), wird VarValue und damit auch VarValueEx zu Beginn der Funktion jedesmal neu geladen.
Wozu sind das dann globale Variablen, obwohl sie doch offenbar nur eine lokale Funktion ausüben?
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 Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: TStringlist leert sich Selbst!

  Alt 8. Mär 2012, 05:55
Evtl. ist der Delimiter ungeschickt gewählt, weil sich das mit dem NameValueSeparator beißt.

Versuch es mal mit dieser Änderung - die function lasse ich jetzt mal untouched:
Delphi-Quellcode:
var
varvalue:TStringlist;
varvalueex:TStringlist;

...

  VarValue:=TStringlist.Create;

  VarValueEx:=TStringlist.Create;
  // VarValueEx.Delimiter:='=';

  varvalue.Values['test'] := 'hallo';
  // und hier ist sie wieder leer ich weiss es nicht zuletzt weil ls.dat 0KB gross ist.
  // Achja, dass Project Ist eine DLL
  varvalue.SaveToFile('c:\ls.dat');
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
danu1104

Registriert seit: 4. Dez 2006
75 Beiträge
 
Delphi 2006 Personal
 
#8

AW: TStringlist leert sich Selbst!

  Alt 8. Mär 2012, 08:12
Ich habe jetzt


Delphi-Quellcode:
try
 test() ....
except
  On e : EStringlistError do
 end;
entfernt , und das Resultat ist das die listen jetzt voll bleiben (juhuu) , doch habe ich den EStringlistError der mir die App immer crasht.

unter var deklariere ich die stringlisten create sie dort wo sie gebraucht werden und schliesse sie am ende der Function wieder. Deswegen kann ich den fehler nicht nachvollziehen. Ich habe nur diese 2 - 3 Stringlisten, und ich habe noch nie diesen fehler gehabt, seit ich mit delphi arbeite ....
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: TStringlist leert sich Selbst!

  Alt 8. Mär 2012, 08:31
Böses böses Speichern unter C:\.

Win Vista/7 wird das verhindern (Keine Schreibzugriff) bzw. in den Virtuellen Store Umschieben so das du deine Änderungen im Windows Explorer unter C:\ nicht sieht.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: TStringlist leert sich Selbst!

  Alt 8. Mär 2012, 08:31
.. wo kommt denn diese Funktion zum Einsatz?

Delphi-Quellcode:
function getvarval(str:Pchar):Pchar;
var ic:Integer;
begin
  varvalue.LoadFromFile('c:\ls.dat');
  varvalueex.DelimitedText:= varvalue.text;
  for ic:=0 to varvalueex.Count -1 do
   if VarValueex.Strings[ic] = str then Begin
    result:=Pchar(VarValueex.Strings[ic+1]);
    Break;
   end;
   showmessage(VarValueEx.Text)
end;
Ich würde die StringList auch als Parameter übergeben.

Delphi-Quellcode:
function getvarval(var myStringList: TStringList;str:Pchar):Pchar;
 var ic:Integer;
 sl : TStringList;
begin
  if assigned(myStringList) then
    begin
      sl := TStringList.create;
      try
         sl.LoadFromFile('c:\ls.dat');
         myStringList.DelimitedText:= sl.Ttext;
         for ic:=0 to myStringList.Count -2 do
           if myStringList.Strings[ic] = str then
             Begin
               result:=Pchar(myStringList.Strings[ic+1]);
               Break;
             end;
          showmessage(myStringList.Text)
      finally
        sl.free;
      end;
    end;
end;
Grüße
Klaus
Klaus

Geändert von Klaus01 ( 8. Mär 2012 um 08:34 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 20:16 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