Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Stringlist in Memorybox schreiben
Samarek - Fr 28.08.09 18:27
Titel: Stringlist in Memorybox schreiben
Tach zusammen,
folgendes ....
ich will eine Textdatei in eine Stringlist auslesen, bis zu einer bestimmten Markierung zeilenweise löschen und dann den Inhalt bis zur nächsten Markierung zeilenweise in eine Memorybox schreiben
eigentlich weiss ich wie das geht, mit 2 while-Schleifen sollte es kein Problem sein, klappt aber irgendwie nicht, allerdings bekomm ich auch keine Fehlermeldung, er schreibt immer nur die erste Zeile in die Memorybox
hat jemand eine Idee woran das liegen könnte, vielleicht ist das Problem ja bekannt oder jemand erkennt es grad wieder
desweiteren ist meine Lösung sicher nicht besonders "schön", daher wüsst ich auch gerne mal ne "schöne" Lösung für mein Problem
Lannes - Fr 28.08.09 20:02
Hallo,
Samarek hat folgendes geschrieben : |
| hat jemand eine Idee woran das liegen könnte |
ja, hab ich, Dein Code ist fehlerhaft. :wink:
Ich würde das auch mit while-Schleifen oder mit IndexOf arbeiten, wenn die Art der Markierung das erlaubt.
Wie sieht denn Dein Code aus, denke das man den/die Fehler findet.
Samarek - Sa 29.08.09 13:25
joa, der Quellcode ist fehlerhaft, denk ich auch ;)
hab mir das auch nochmal genauer angeguckt und der Fehler muss eigentlich bei der Ausgabe in die Memory-Box liegen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| zeile:=html_bearb[0]; zeil_count:=0; while zeile <> bearb_en do begin mem_inhalt.lines[zeil_count]:=zeile; html_bearb.Delete(0); zeile:=html_bearb[0]; zeil_count:=zeil_count+1; end; |
html_bearb ist die Stringliste, mem_inhalt ist die Memory-Box, zeil_count ist eine integer-Variable die er beim durchlaufen hochzählen soll, damit er bei jedem Durchlauf in eine neue Zeile der Memory-Box schreibt, bearb_en ist eine string-Variable in der steht bis zu welcher Zeile er gehen soll, also, die "Zielzeile"
solange die aktuelle Zeile ungleich der "Zielzeile" ist soll er die aktuelle Zeile in die Memory-Box schreiben, die oberste Zeile in der Stringliste löschen und dann die oberste Zeile der Stringliste in die Variable für die aktuelle Zeile laden und zum Schluss den Zeilenzähler um 1 erhöhen
aber, wie gesagt, er gibt immer nur die oberste Zeile der Stringliste in die Memory-Box aus
SvenAbeln - Sa 29.08.09 14:23
Ich nehme mal an deine Memory-Box ist ein TMemo?
Hat dein Memo denn genug Zeilen? Denn dieser Teil von deiner Funktion geht nur, wenn es auch eine Zeile mit dem Index 'zeil_count' in dem Memo gibt.
Delphi-Quelltext
1:
| mem_inhalt.lines[zeil_count]:=zeile; |
So sollte es gehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| zeile:=html_bearb[0]; mem_inhalt.clear; while zeile <> bearb_en do begin mem_inhalt.lines.add(zeile); html_bearb.Delete(0); zeile:=html_bearb[0]; end; |
Samarek - Sa 29.08.09 15:51
Ausgezeichnet
Ich wusste doch dass es etwas saublödes war
herzlichen Dank für die Hilfe
jetzt funktioniert es
.... womit ich dann direkt beim nächsten "Problem" bin
es ist nicht wirklich ein Problem im Sinne von "das Programm läuft nicht"
es ist mehr ein Problem im Sinne von "Quellcode verschönern"
und zwar arbeite ich mit 3 Stringlisten, eine enthält den Anfang der Datei, eine das Ende und die dritte enthält den veränderten Teil, der, wie sich bereits vermuten lässt, zwischen den Anfang und das Ende soll
bisher mach ich das mit einer vierten Stringlist in die ich nacheinander alle 3 Stringlisten schreibe, aber das muss doch auch einfacher bzw. schöner gehen.
Hat da jemand mal nen Tip für mich ???
Lannes - Sa 29.08.09 18:37
Hallo,
vermute das Du einen Teil eines Textes(HTML?) austauschen willst, dann kannst Du doch alles mit einer StringList realisieren.
Überschreib doch die Zeilen in der Stringlist und falls der einzufügende Bereich größer ist bietet Dir die Stringlist auch insert.
Eventuell hilft dir auch Stringlist.AddStrings weiter.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| StrList[Index] := 'Hallo'; StrList.insert(Index,'Hallo'); StrList.AddStrings(QuellStrList); |
Samarek - Sa 29.08.09 19:13
ok, das AddStrings hat mir jetzt schonmal 32 Zeilen Code gespart
"Wer lesen kann ist klar im Vorteil"
wie genau überschreibe ich denn Strings in einer Stringlist???
und ... mit dem Index-Befehl füge ich einen Index ein oder lege ich damit einen Index fest???
Lannes - Sa 29.08.09 20:11
Hallo,
so wie ich es in dem Code steht, etwas ausführlicher:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var Index : Integer; begin Index := 3; StrList[Index] := 'Hallo'; end; |
Samarek hat folgendes geschrieben : |
| ok, das AddStrings hat mir jetzt schonmal 32 Zeilen Code gespart |
Da würde mich Dein ursprünglicher Code jetzt aber interessieren :?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!