Autor Beitrag
Samarek
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 23

Win 7 Prof, Ubuntu 9.10
Java(Eclipse), C/C++/C# (VS 2008, VC# EE)
BeitragVerfasst: Fr 28.08.09 18:27 
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

_________________
Dank und Gruß
Samarek


Zuletzt bearbeitet von Samarek am Sa 29.08.09 13:16, insgesamt 1-mal bearbeitet
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Fr 28.08.09 20:02 
Hallo,


user profile iconSamarek hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Samarek Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 23

Win 7 Prof, Ubuntu 9.10
Java(Eclipse), C/C++/C# (VS 2008, VC# EE)
BeitragVerfasst: 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
mem_inhalt.lines[zeil_count]:=zeile;					


So sollte es gehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
zeile:=html_bearb[0];
mem_inhalt.clear;               // Memo löschen
while zeile <> bearb_en do
begin
  mem_inhalt.lines.add(zeile);  // neue Zeile ans Memo anhängen
  html_bearb.Delete(0);
  zeile:=html_bearb[0];
end;
Samarek Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 23

Win 7 Prof, Ubuntu 9.10
Java(Eclipse), C/C++/C# (VS 2008, VC# EE)
BeitragVerfasst: 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 ???

_________________
Dank und Gruß
Samarek
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
//überschreiben
StrList[Index] := 'Hallo';
//einfügen
StrList.insert(Index,'Hallo');
//StringList an andere hängen
StrList.AddStrings(QuellStrList);

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Samarek Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 23

Win 7 Prof, Ubuntu 9.10
Java(Eclipse), C/C++/C# (VS 2008, VC# EE)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Sa 29.08.09 20:11 
Hallo,

so wie ich es in dem Code steht, etwas ausführlicher:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var Index : Integer;
begin
  Index := 3;
  StrList[Index] := 'Hallo'//in der vierten Zeile steht jetzt 'Hallo'
                             //vorrausgesetzt Count ist mindestens 4 
end;




user profile iconSamarek hat folgendes geschrieben Zum zitierten Posting springen:
ok, das AddStrings hat mir jetzt schonmal 32 Zeilen Code gespart
Da würde mich Dein ursprünglicher Code jetzt aber interessieren :?

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )