Autor Beitrag
Smartie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: Di 07.06.05 08:53 
Hallo!

Ok, mein Gerät liest schön brav seine Daten, spuckt diese auch aus, und ich hab sie auch schon in einer Strinliste gespeichert.

Ok, jetzt muß ich das ganze "nur" noch rückwärts hinbekommen.

Ich habe also eine Stringliste in einer Textdatei gespeichert.
Diese sieht ungefähr so aus:

Zitat:

xVar01a=1
xVar01b=1
xVar02=32
xVar04=9
xVar05=Test_Nr_398
xVar06a=1
xVar06b=1
xVar01c=0
xVar07=4
xVar08=2
xVar09=1

{usw.}




Ok, und das Ding muß ich
1. Aus der Datein c:\temp\output.txt rauslesen
(da gibts doch sicherlich sowas wie OutputSL.LoadfromFile('c:\temp\output.txt');, oder?)

und 2. (jetzt kommt für mich mein echtes Rätsel) wie teile ich das am besten wieder auf? Und, kann ich das irgendwie sortieren? (Ich wieß ja nicht, ob man mir dies in dieser Reihenfolge übergibt).

Wenn jemand einen kleinen Hinweis hat, wie ich das möglichst wenig umständlich mache, würd mich das freuen.

Lieben Gruß und herzlichen Dank


Smartie
iKilledKenny
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Di 07.06.05 09:07 
laden kannst du das wie du schon geschrieben hast mit
ausblenden Delphi-Quelltext
1:
StringList.LoadFromFile ('c:\meinOutput.txt');					

danach hast du in deiner liste für jede zeile des files einen eintrag. die einträge müssten in der reihenfolge, wie sie im file stehen, auch in der liste auftauchen.

eine stringliste kann man sortieren mit
ausblenden Delphi-Quelltext
1:
StringList.Sort;					


viele grüße
alex
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 07.06.05 09:15 
Moin!

user profile iconSmartie hat folgendes geschrieben:
wie teile ich das am besten wieder auf?

Was heißt denn "aufteilen"? Den Wert nach dem Gleichheitszeichen von dem Schlüsselnamen trennen? Dafür gibt es doch (im Beispiel):
ausblenden Delphi-Quelltext
1:
StringList.Values['xVar01a']					

was in diesem Fall "1" liefern würde.

Dann braucht man das auch nicht sortieren, allerdings setzt es voraus, die Schlüsselnamen zu kennen. Blätter man bischen mehr in der OH bei StringList. :wink:

cu
Narses
Smartie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: Di 07.06.05 09:18 
user profile iconiKilledKenny hat folgendes geschrieben:
laden kannst du das wie du schon geschrieben hast mit
ausblenden Delphi-Quelltext
1:
StringList.LoadFromFile ('c:\meinOutput.txt');					



Super, freut mich, danke für die Bestätigung.

Zitat:

danach hast du in deiner Liste für jede Zeile des files einen Eintrag. die Einträge müssten in der Reihenfolge, wie sie im file stehen, auch in der Liste auftauchen.



Gut, aber dann steht da ja auch eben z.B.  xVar04=9

Wie teile ich das wieder auf, daß in ein Array 'xVar04' und ins andere '9' kommt?

Herzlichen Dank und lieben Gruß


Smartie
iKilledKenny
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Di 07.06.05 10:02 
nun denn, eine stringliste ist kein array, also musst du über die liste loopen und die einträge selber zerteilen.

z.b. so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
for i := 0 to pred (StringList.Count) do
  begin
    s := StringList [i];
    iPos := Pos ('=', s);
    if (iPos < 1) then
      Continue; //kein "=" gefunden -> ungültiger eintrag
    sKey := Copy (s, 1, pred (iPos));
    sVal := Copy (s, succ (iPos), Length (s));
    MyAddToArray (sKey, sVal);
  end;


ist ungetestet, müsste aber so funktionieren. das MyAddToArray musst du natürlich selber implementieren.

viele grüße
alex
Smartie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: Di 07.06.05 10:05 
Danke, ich hab erst jetzt den Beitrag von Narses gelesen, ich denke ich mache iene Schleife, und lasse mir die Werte durch OutputSL.Values...
ins entsprechende Array schreiben.

Herzlichen Dank und lieben Gruß,

Smartie
Smartie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: Di 07.06.05 10:19 
Ok, noch nicht getestet, noch in der Entwicklungsphase, aber... was passier "schlimmes", wenn ich eine Stringliste NICHT freigebe?
Ich werde die nämlich immer wieder mal brauchen so wies aussieht, also muß ich diese auch nicht freigeben, oder? Hoffentlich werde ich jetzt nicht aus Speicehrgründen für diese Aussage gesteinigt, aber ich würde es eifnach gerne mal wissen.

Lieben Gruß und Danke

Smartie
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 07.06.05 10:24 
Das dürfte kein Problem sein. Im Gegenteil. Wenn du die Liste immer wieder im Programm benötigst, ist es sogar besser, diese einmalig zu erzeugen.
Denke aber beim Programmende daran, dort die StringList freizugeben.
Smartie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: Di 07.06.05 10:28 
Ok, danke Jasocul! Dann initialisier ich sie am Programmanfang (und nicht am Anfang der ersten Prozedur *g*), und geb sie am Schluß wieder frei.

Aber, was würde passieren, wenn ich sie gar nicht frei geben würde? Was wäre dann?

Lieben Gruß

Smartie
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Di 07.06.05 10:32 
user profile iconSmartie hat folgendes geschrieben:
Ok, noch nicht getestet, noch in der Entwicklungsphase, aber... was passier "schlimmes", wenn ich eine Stringliste NICHT freigebe?
Ich werde die nämlich immer wieder mal brauchen so wies aussieht, also muß ich diese auch nicht freigeben, oder? Hoffentlich werde ich jetzt nicht aus Speicehrgründen für diese Aussage gesteinigt, aber ich würde es eifnach gerne mal wissen.

Lieben Gruß und Danke

Smartie


Wenn du die enmal beim Programmstart anlegst und immer wieder die gleiche verwendest, passiert gar nichts schlimmes, es ist nur schlechter Stil - man sollte sich grundsätzlich angewöhnen, alles was man an Speicher belegt, spätestens beim Beenden des Programms wieder freizugeben. Wenn man es nicht tut, sammeln sich während des Programmlaufs sonst einfach alte Objekte an und das Programm braucht immer mehr Speicher - im Extremfall eben bis kein freier Speicher mehr da ist. Zuerst fängt das System dann an, auf Platte auszulagern und alles wird sehr langsam, bis irgendwann die Platte voll ist und nichts mehr geht. Dieses Extrem dürfte in der Praxis nur bei Programmen auftreten, die entweder sehr lange laufen (Serverdienste z.B.) oder sowieso viel Speicher benötigen.

Stefan
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 07.06.05 10:34 
Ganz einfach: Memory-Leak.
Je nach Umfang des letzten Inhalts, ist das entsprechend groß.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Di 07.06.05 11:11 
Wenn ich am Anfang des Programmes 1x eine Stringliste instanziiere und die auch beim Programmende nicht freigebe, passiert gar nichts, ausser, das man dich auslacht. Und das auch nur, wenn Du deinen Code veröffentlichst.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 07.06.05 11:25 
@alzaimer:
Ganz sicher, dass kein Memory-Leak bleibt, wenn man es vergisst?
Bin kein Spezialist für die Speicherverwaltung, aber ich meinte bisher, dass nicht freigegebene Objekte Memory-Leaks verursachen.
Falls dem nicht so ist, kläre mich doch bitte auf. Ich lerne immer gerne was dazu.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Di 07.06.05 11:44 
@jasocul: Frag nicht so gemein... :wink:. Was Handles anbelangt solltest Du Recht haben. Bei Speicher (Ausnahme(?) GlobalAlloc) meine ich, das es nicht so wild ist, weil Windows beim Prozessende (oder die EXE) aufräumt. Wenn ich eine Anwendung schreibe, die nur Speicher verbrät, aber nie freigibt, dann sehe ich das im Taskmanager. Wenn die Anwendung terminiert (und sei es, wenn ich sie abschiesse), geht der Speicherverbrauch auf den Zustand vor dem Programmstart zurück.

Bei W98/ME bin ich mir da aber nicht so sicher.

Allerdings ist es "gesünder", zu verbreiten, Windows würde sich irgendwann aufhängen, wenn eine Anwendung den Speicher nicht wieder freigibt.

Allerdings sollte man das mal abklären, ich bin gerade zu faul. Freiwillige VOR! Aber Zack-Zack!
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 07.06.05 11:59 
Sollte nicht gemein sein. Es ist interessiert mich wirklich. Ich bin da nie in die Tiefe gedrungen. Grundsätzlich habe ich mir angewöhnt, Speicher wieder freizugeben. In jedem Fall, wenn möglich.
Aber vielleicht ist wirklich mal ein Spezi bereit, sich darüber zu verbreiten.
Smartie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: Di 07.06.05 12:25 
Ich könnt mir bestenfalsl vorstellen, wenn der Computer (Ich gehe jetzt mal von einem MS-Betriebssystem aus) einfach so am Programmende oder kurz vorher abkackt, daß derSpeicehr dan nimmer no belegt sein könnte. Ic hweiß es aber nicht, ist nur eine Mutmaßung

Lieben Gruß

Smartie