| Autor |
Beitrag |
Smartie
      
Beiträge: 205
|
Verfasst: 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
      
Beiträge: 394
Erhaltene Danke: 8
Win XP
D5 Prof, C# Express 2005
|
Verfasst: Di 07.06.05 09:07
laden kannst du das wie du schon geschrieben hast mit
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
Delphi-Quelltext
viele grüße
alex
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 07.06.05 09:15
Moin!
Smartie 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):
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.
cu
Narses
|
|
Smartie 
      
Beiträge: 205
|
Verfasst: Di 07.06.05 09:18
iKilledKenny hat folgendes geschrieben: | laden kannst du das wie du schon geschrieben hast mit
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
      
Beiträge: 394
Erhaltene Danke: 8
Win XP
D5 Prof, C# Express 2005
|
Verfasst: 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:
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; 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 
      
Beiträge: 205
|
Verfasst: 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 
      
Beiträge: 205
|
Verfasst: 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
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: 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 
      
Beiträge: 205
|
Verfasst: 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
      
Beiträge: 612
WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
|
Verfasst: Di 07.06.05 10:32
Smartie 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
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 07.06.05 10:34
Ganz einfach: Memory-Leak.
Je nach Umfang des letzten Inhalts, ist das entsprechend groß.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: 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
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: 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
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Di 07.06.05 11:44
@jasocul: Frag nicht so gemein...  . 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
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: 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 
      
Beiträge: 205
|
Verfasst: 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
|
|
|