![]() |
Schleife - tstringlist - Einträge einfügen und löschen
Folgendes Problem
ich habe eine Stringliste mit x verschiedenen Einträgen es gibt welche die mit @ anfangen - die sollen gelöscht werden es gibt die Kombination @FOLDER und in der nächsten Zeile steht ^ - dies bedeutet für mich, es ist eine Seiten anfang - Zeile @FOLDER muss ich löschen es gibt eine Zeile mit ^, - hier muss ich den String auseinanderbasteln und die 2-5 werte sollen nacheinander in 2-5 Zeilen weiter oben, wo ^ steht eingefügt werden. die Zeile ^, soll am Ende dann natürlich auch gelöscht werden mein Problem ist jetzt nur wie ich das in einer Schleife zusammenbasteln kann, da ich ja einfügen und löschen will. Jemand einen guten Tipp? Hier einmal ein Beispiel: vorher:
Delphi-Quellcode:
nachher:
@x1
@x2,ANSI @FOLDER ^ hallo 1 hallo 2 egal was hier steht, es ist die . ^,^test1^,^heute^,^2^,^was auch immer^,^^,^^,^1^
Delphi-Quellcode:
test1
heute 2 was auch immer 1 hallo 1 hallo 2 egal was hier steht, es ist die . |
Re: Schleife - tstringlist - Einträge einfügen und löschen
Tipp: Zerleg dein Problem in Teilproblme (Hast du ja schon) und dann schreibst du für jedes teilproblem eine Routine, die das Teilproblem löst. Am Ende musst du das ganze nur noch zusammensetzen in der Schleife.
|
Re: Schleife - tstringlist - Einträge einfügen und löschen
1. Stringliste in eine temporäre Datei speichern
2. Zeile für zeile aus der Temporären Datei einlesen mit dem ASC-Wert(@) vergleichen wenn gefunden überspringen. 3. Text nach ^ scannen wenn LENGTH(^) = 1 zeile überspringen. 4. Text nach ^ scannen wenn LENGTH(^) <> 1 zeile Spliten mit Delemiter ^. Stringliste löschen und abhängig vom Split(Array) zur Stringliste(wert von Array.Index) addieren. gruß |
Re: Schleife - tstringlist - Einträge einfügen und löschen
Zitat:
@Susanne: Die Schleife kannst du trotzdem machen. Ich würde mir eine Laufvariable anlegen und dann in einer While Schleife arbeiten. Diese untersucht die Bedingung mit jedem Durchlauf erneut und dadurch kannst du die sprachlichen Elemente Continue nutzen. Grobes Beispiel zu der Schleifenproblematik:
Delphi-Quellcode:
Die einzelnen Bedingungen und Aktionen kannst du ja anhand deiner Schilderungen oben einfügen.
Var
lLine: Integer; Begin lLine := 0; While ( lLine < stringlist.Count ) Do Begin If ( ZeileZuLöschen ) Then Begin stringlist.Delete(lLine); Continue; End; If ( ZeileEditieren ) Then Begin stringlist[lLine] := 'whatever' + stringlist[lLine]; End Else If ( ZeileEinfügen ) Then // Else If, damit die vorher editierte Zeile nicht vllt. diese Bedingung erfüllt Begin stringlist.Insert(lLine, 'blubb'); Continue; // oder Dec(lLine); End; Inc(lLine); End; End; |
Re: Schleife - tstringlist - Einträge einfügen und löschen
Zitat:
War auch nur ein vorschlag ;) gruß |
Re: Schleife - tstringlist - Einträge einfügen und löschen
Hallo Susanne,
hier mein Versuch:
Delphi-Quellcode:
Grüße vom marabu
uses
StrUtils; procedure DoProcess(Lines: TStrings); var i, iLine: Integer; s: TStrings; begin s := TStringList.Create; s.QuoteChar := '^'; for iLine := Pred(Lines.Count) downto 0 do begin if AnsiStartsText('^,', Lines[iLine]) then begin s.DelimitedText := Copy(Lines[iLine], 3, MaxInt); Lines.Delete(iLine); end else if AnsiStartsText('^', Lines[iLine]) then begin Lines.Delete(iLine); for i := Pred(s.Count) downto 0 do Lines.Insert(iLine, s[i]); s.Clear; // substitute once end else if AnsiStartsText('@', Lines[iLine]) then Lines.Delete(iLine); end; s.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz