| Autor |
Beitrag |
Samarek
      
Beiträge: 23
Win 7 Prof, Ubuntu 9.10
Java(Eclipse), C/C++/C# (VS 2008, VC# EE)
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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.
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 
      
Beiträge: 23
Win 7 Prof, Ubuntu 9.10
Java(Eclipse), C/C++/C# (VS 2008, VC# EE)
|
Verfasst: 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
      
Beiträge: 334
Erhaltene Danke: 3
|
Verfasst: 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 
      
Beiträge: 23
Win 7 Prof, Ubuntu 9.10
Java(Eclipse), C/C++/C# (VS 2008, VC# EE)
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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); |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Samarek 
      
Beiträge: 23
Win 7 Prof, Ubuntu 9.10
Java(Eclipse), C/C++/C# (VS 2008, VC# EE)
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Sa 29.08.09 20:11
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
|