![]() |
Leerzeilen in Tstringlist
hey,
ich habe eine Problem. Ich habe mherere Memofelder und möchte diese in einer Textdatei speichern. Nun sollen aber keine Leerzeilen in die datei und wenn in dem memoFelder 'Serien Termine' steht sollen alle Zeilen ab dieser Zeile auch NICHT gespeichert werden. Ich dachte ich mach das so : aber es sind sowohl leerzeilen in meiner textdatei und die Sachen die in den Memofelder mal drin standen sind hinterher irg. in der Textdatei nicht drin... wordrann könnte das liegen ?! hoffe ihr könnt mir (schon wieder :oops: :oops: ) Helfen lg
Delphi-Quellcode:
ps. ich hab mir sogar mühe gegeben es zu formatieren ^^
procedure TForm1.SpeichernClick(Sender: TObject);
var MoString, DiSTring, MiString, DoString, FrString, SaString, SoString :Tstringlist; PrüfString : String; i : integeR ; ZeilenZähler : Integer ; begin ZeilenZähler := 0 ; MoString := Tstringlist.Create; DiSTring := Tstringlist.Create; MiString := Tstringlist.Create; DoString := Tstringlist.Create; FrString := Tstringlist.Create; SaString := Tstringlist.Create; SoString := Tstringlist.Create; MoString.Add('Montag'); DiString.Add('Dienstag'); MiString.Add('Mittwoch'); DoString.Add('Donnerstag'); FrString.Add('Freitag'); SaString.Add('Samstag'); SoString.Add('Sonntag'); For i := 0 to (Memo1.Lines.Count) do begin Prüfstring := Memo1.Lines[ZeilenZähler]; if(Prüfstring = #13#10) or (Prüfstring ='Serien Termine') then begin break; ZeilenZähler := 0; end Else MoString.Add(Memo1.Lines[ZeilenZähler]) ; Inc(ZeilenZähler); end; For i := 0 to (Memo2.Lines.Count) do begin Prüfstring := Memo2.Lines[ZeilenZähler]; if(Prüfstring = #13#10) or (Prüfstring ='Serien Termine') then begin break; ZeilenZähler := 0; end Else DiString.Add(Memo2.Lines[ZeilenZähler]) ; Inc(ZeilenZähler); end; For i := 0 to (Memo3.Lines.Count) do begin Prüfstring := Memo3.Lines[ZeilenZähler]; if(Prüfstring = #13#10) or (Prüfstring ='Serien Termine') then begin break; ZeilenZähler := 0; end Else MiString.Add(Memo3.Lines[ZeilenZähler]) ; Inc(ZeilenZähler); end; For i := 0 to (Memo4.Lines.Count) do begin Prüfstring := Memo4.Lines[ZeilenZähler]; if(Prüfstring = #13#10) or (Prüfstring ='Serien Termine') then begin break; ZeilenZähler := 0; end Else DoString.Add(Memo4.Lines[ZeilenZähler]) ; Inc(ZeilenZähler); end; For i := 0 to (Memo5.Lines.Count) do begin Prüfstring := Memo5.Lines[ZeilenZähler]; if(Prüfstring = #13#10) or (Prüfstring ='Serien Termine') then begin break; ZeilenZähler := 0; end Else FrString.Add(Memo5.Lines[ZeilenZähler]) ; Inc(ZeilenZähler); end; For i := 0 to (Memo6.Lines.Count) do begin Prüfstring := Memo6.Lines[ZeilenZähler]; if(Prüfstring = #13#10) or (Prüfstring ='Serien Termine') then begin break; ZeilenZähler := 0; end Else SaString.Add(Memo6.Lines[ZeilenZähler]) ; Inc(ZeilenZähler); end; For i := 0 to (Memo7.Lines.Count) do begin Prüfstring := Memo7.Lines[ZeilenZähler]; if(Prüfstring = #13#10) or (Prüfstring ='Serien Termine') then begin break; ZeilenZähler := 0; end Else SoString.Add(Memo7.Lines[ZeilenZähler]) ; Inc(ZeilenZähler); end; Zwischenspeicher.Text := MoString.Text; Zwischenspeicher.Add(DiString.Text); Zwischenspeicher.Add(MiString.text); Zwischenspeicher.Add(DoString.Text); Zwischenspeicher.Add(FrString.Text); Zwischenspeicher.Add(SaString.Text); Zwischenspeicher.Add(SoString.Text); Zwischenspeicher.SaveToFile(Textdatei); end; |
Re: Leerzeilen in Tstringlist
Erster Eindruck:
MfG, Bug |
Re: Leerzeilen in Tstringlist
okay
ich versuchs ^^ hoffentlich klappt das ^^ |
Re: Leerzeilen in Tstringlist
ich hab das jetzt so geändert wie ich dachte, dass du es meisnt.
Trotzdem hatte ich noch leerzeilen in der Textdatei drin. Also habe ich gedacht ich baue noch eine Prüf-For-Schleife ein ... aber selbst das bringt nichts .... im mom siehst so aus : (und es sind immernoch leerzeilen in der textdatei *grummel*)
Delphi-Quellcode:
procedure TForm1.SpeichernClick(Sender: TObject);
var MoString, DiSTring, MiString, DoString, FrString, SaString, SoString :Tstringlist; PrüfString : String; i : integeR ; begin MoString := Tstringlist.Create; DiSTring := Tstringlist.Create; MiString := Tstringlist.Create; DoString := Tstringlist.Create; FrString := Tstringlist.Create; SaString := Tstringlist.Create; SoString := Tstringlist.Create; MoString.Add('Montag'); DiString.Add('Dienstag'); MiString.Add('Mittwoch'); DoString.Add('Donnerstag'); FrString.Add('Freitag'); SaString.Add('Samstag'); SoString.Add('Sonntag'); For i := 0 to (Memo1.Lines.Count-1) do begin Prüfstring := Memo1.Lines[i]; if(Prüfstring = '') or (Prüfstring ='Serien Termine') then continue Else MoString.Add(Memo1.Lines[i]) ; end; For i := 0 to (Memo2.Lines.Count-1) do begin Prüfstring := Memo2.Lines[i]; if(Prüfstring = '') or (Prüfstring ='Serien Termine') then continue Else DiString.Add(Memo2.Lines[i]) ; end; For i := 0 to (Memo3.Lines.Count-1) do begin Prüfstring := Memo3.Lines[i]; if(Prüfstring = '') or (Prüfstring ='Serien Termine') then continue Else MiString.Add(Memo3.Lines[i]) ; end; For i := 0 to (Memo4.Lines.Count-1) do begin Prüfstring := Memo4.Lines[i]; if(Prüfstring = '') or (Prüfstring ='Serien Termine') then continue Else DoString.Add(Memo4.Lines[i]) ; end; For i := 0 to (Memo5.Lines.Count-1) do begin Prüfstring := Memo5.Lines[i]; if(Prüfstring = '') or (Prüfstring ='Serien Termine') then continue Else FrString.Add(Memo5.Lines[i]) ; end; For i := 0 to (Memo6.Lines.Count-1) do begin Prüfstring := Memo6.Lines[i]; if(Prüfstring = '') or (Prüfstring ='Serien Termine') then continue Else SaString.Add(Memo6.Lines[i]) ; end; For i := 0 to (Memo7.Lines.Count-1) do begin Prüfstring := Memo7.Lines[i]; if(Prüfstring = '') or (Prüfstring ='Serien Termine') then continue Else SoString.Add(Memo7.Lines[i]) ; end; Zwischenspeicher.Text := MoString.Text; Zwischenspeicher.Add(DiString.Text); Zwischenspeicher.Add(MiString.text); Zwischenspeicher.Add(DoString.Text); Zwischenspeicher.Add(FrString.Text); Zwischenspeicher.Add(SaString.Text); Zwischenspeicher.Add(SoString.Text); For i:= 0 To Zwischenspeicher.Count -1 do // das hier begin // ist If(Zwischenspeicher[i] = '') Then // jetzt Zwischenspeicher.Delete(i); // neu end; Zwischenspeicher.SaveToFile(Textdatei); end; |
Re: Leerzeilen in Tstringlist
Ich habe mir nicht alles in allen Einzelheiten angeschaut, aber beim Löschen musst Du die Schleife rückwärts laufen lassen.
Delphi-Quellcode:
For i:= Zwischenspeicher.Count -1 downto 0 do // das hier
begin // ist If(Zwischenspeicher[i] = '') Then // jetzt Zwischenspeicher.Delete(i); // neu end; |
Re: Leerzeilen in Tstringlist
nach dem speichern sieht der inhalt meiner textdatei aber immer noch so aus :
Montag Dienstag Mittwoch Donnerstag Freitag Samstag Sonntag also klappt es immer noch nicht .... nur (komischerweise) nach Montag ist keine Leerzeile ) |
Re: Leerzeilen in Tstringlist
Und so?
Delphi-Quellcode:
Übrigens machst Du zig mal quasi dasselbe, das würde ich in eine Funktion auslagern.
Zwischenspeicher.Add(trim(DiString.Text)); // das Gleiche für die anderen Listen
|
Re: Leerzeilen in Tstringlist
Jetzt klappt es
danke aber wenn ich das in eine Funktion auslager müsste ich doc hjedesmal übergeben, an welches Memo und Welche TStringlist. dann ist das doch auch umständlich odeR ? |
Re: Leerzeilen in Tstringlist
Finde ich nicht. Außerdem kannst Du dann sicher sein, dass Du immer exakt dasselbe machst und nicht mittendrin irgendwo eine Zeile vergisst oder sowas.
|
Re: Leerzeilen in Tstringlist
Hallo,
auch wenn schon eine Lösung da ist, mal ein anderer Ansatz: (bin halt mal wieder langsamer als DeddyH :cry: ) Zuerst alle Leerzeilen löschen und dann alles hinter 'Serien Termine' löschen. Dazu nehmen wir eine Funktion, um das alles nicht mehrfach implementieren zu müssen.
Delphi-Quellcode:
Im Programm dann so aufrufen:
function MachLeerWeg(Eingabe : TStrings) : String;
begin // Damit sind alle Leerzeilen weg. for i := Eingabe.Count - 1 DownTo 0 do if Eingabe[i] = '' then Eingabe.Delete(i); // Nun prüfen, ob die Zeichenfolge 'Serien Termine' vorhanden ist: if Pos('Serien Termine',Eingabe.Text) > 0 then begin repeat Eingabe.Delete(Eingabe.Count - 1); until Eingabe[Eingabe.Count - 1] = 'Serien Termine'; end; if (Eingabe.Count > 0) and (Eingabe[Eingabe.Count - 1]) = 'Serien Termine' then begin Eingabe.Delete(Eingabe.Count - 1); end; Result := Eingabe.Text; end;
Delphi-Quellcode:
(Das ist jetzt nur so hingedaddelt und nicht getestet.)
procedure TForm1.SpeichernClick(Sender: TObject);
begin Zwischenspeicher.Clear; Zwischenspeicher.Add('Montag'); Zwischenspeicher.Add(MachLeerWeg(Memo1.Lines)); Zwischenspeicher.Add('Dienstag'); Zwischenspeicher.Add(MachLeerWeg(Memo2.Lines)); Zwischenspeicher.Add('Mittwoch'); Zwischenspeicher.Add(MachLeerWeg(Memo3.Lines)); Zwischenspeicher.Add('Donnerstag'); Zwischenspeicher.Add(MachLeerWeg(Memo4.Lines)); Zwischenspeicher.Add('Freitag'); Zwischenspeicher.Add(MachLeerWeg(Memo5.Lines)); Zwischenspeicher.Add('Samstag'); Zwischenspeicher.Add(MachLeerWeg(Memo6.Lines)); Zwischenspeicher.Add('Sonntag'); Zwischenspeicher.Add(MachLeerWeg(Memo7.Lines)); Zwischenspeicher.SaveToFile(Textdatei); end; |
Re: Leerzeilen in Tstringlist
Hallo,
oder wie es so schön heisst DRY Don't repeat yourself Heiko |
Re: Leerzeilen in Tstringlist
oU man
ich bekomme das einfach nicht hin.... wieso geht das hier nicht ? ich hab sogar extra noch einmal in den Crashkurs delphi geguckt und alles aber es kommt nur mist raus
Delphi-Quellcode:
function TForm1.SpeicherHilfe(Var Memo: TMemo ; StringListe : TStringList): TStringList;
var I : Integer ; PrüfString : String; begin For i := 0 to (Memo.Lines.Count-1) do begin Prüfstring := Memo1.Lines[i]; if(Prüfstring = '') or (Prüfstring ='Serien Termine') then continue Else StringListe.Add(Memo.Lines[i]) ; end; end; procedure TForm1.SpeichernClick(Sender: TObject); var MoString, DiSTring, MiString, DoString, FrString, SaString, SoString :Tstringlist; begin MoString := Tstringlist.Create; DiSTring := Tstringlist.Create; MiString := Tstringlist.Create; DoString := Tstringlist.Create; FrString := Tstringlist.Create; SaString := Tstringlist.Create; SoString := Tstringlist.Create; MoString.Add('Montag'); DiString.Add('Dienstag'); MiString.Add('Mittwoch'); DoString.Add('Donnerstag'); FrString.Add('Freitag'); SaString.Add('Samstag'); SoString.Add('Sonntag'); MoString := SpeicherHilfe( Memo1, MoString); DiString := SpeicherHilfe( Memo2, DiString); MiString := SpeicherHilfe( Memo3, MiString); DoString := SpeicherHilfe( Memo4, DoString); FrString := SpeicherHilfe( Memo5, FrString); SaString := SpeicherHilfe( Memo6, SaString); SoString := SpeicherHilfe( Memo7, SoString); Zwischenspeicher.Text := MoString.Text; Zwischenspeicher.Add(trim(DiString.Text)); Zwischenspeicher.Add(trim(MiString.Text)); Zwischenspeicher.Add(trim(DoString.Text)); Zwischenspeicher.Add(trim(FrString.Text)); Zwischenspeicher.Add(trim(SaString.Text)); Zwischenspeicher.Add(trim(SoString.Text)); Zwischenspeicher.SaveToFile(Textdatei); end; |
Re: Leerzeilen in Tstringlist
Delphi-Quellcode:
BTW. Das mit den Umlauten in Variablennamen ninmt er so? :gruebel:
For i := 0 to Memo.Lines.Count-1 do
begin Prüfstring := Memo1.Lines[i]; if(Prüfstring <> '') and (Prüfstring <> 'Serien Termine') then StringListe.Add(Memo1.Lines[i]) ; end; |
Re: Leerzeilen in Tstringlist
ja das mit dne umlauten nimmst er
aber ich kanns ändern wenn es euch stört... wenn ich das alles so mach : bekommt meine Textdatei den Text : Sonntag Sonntag Sonntag Sonntag Sonntag Sonntag Sonntag aber warum ?
Delphi-Quellcode:
function TForm1.SpeicherHilfe(Var Memo: TMemo ; StringListe : TStringList): TStringList;
var I : Integer ; Pruefstring : String; begin For i := 0 to Memo.Lines.Count-1 do begin Pruefstring := Memo1.Lines[i]; if(Pruefstring <> '') and (Pruefstring <> 'Serien Termine') then StringListe.Add(Memo1.Lines[i]) ; end; end; procedure TForm1.SpeichernClick(Sender: TObject); var MoString, DiSTring, MiString, DoString, FrString, SaString, SoString :Tstringlist; begin MoString := Tstringlist.Create; DiSTring := Tstringlist.Create; MiString := Tstringlist.Create; DoString := Tstringlist.Create; FrString := Tstringlist.Create; SaString := Tstringlist.Create; SoString := Tstringlist.Create; MoString.Add('Montag'); DiString.Add('Dienstag'); MiString.Add('Mittwoch'); DoString.Add('Donnerstag'); FrString.Add('Freitag'); SaString.Add('Samstag'); SoString.Add('Sonntag'); MoString := SpeicherHilfe( Memo1, MoString); DiString := SpeicherHilfe( Memo2, DiString); MiString := SpeicherHilfe( Memo3, MiString); DoString := SpeicherHilfe( Memo4, DoString); FrString := SpeicherHilfe( Memo5, FrString); SaString := SpeicherHilfe( Memo6, SaString); SoString := SpeicherHilfe( Memo7, SoString); Zwischenspeicher.Text := MoString.Text; Zwischenspeicher.Add(trim(DiString.Text)); Zwischenspeicher.Add(trim(MiString.Text)); Zwischenspeicher.Add(trim(DoString.Text)); Zwischenspeicher.Add(trim(FrString.Text)); Zwischenspeicher.Add(trim(SaString.Text)); Zwischenspeicher.Add(trim(SoString.Text)); Zwischenspeicher.SaveToFile(Textdatei); end; |
Re: Leerzeilen in Tstringlist
Delphi-Quellcode:
function TForm1.SpeicherHilfe(Var Memo: TMemo ; StringListe : TStringList): TStringList;
var I : Integer ; Pruefstring : String; begin For i := 0 to Memo.Lines.Count-1 do begin --> Fehler!!! muss Memo heißen --> Pruefstring := Memo1.Lines[i]; if(Pruefstring <> '') and (Pruefstring <> 'Serien Termine') then --> Fehler!!! muss Memo heißen --> StringListe.Add(Memo1.Lines[i]) ; end; end; |
Re: Leerzeilen in Tstringlist
aber selbst wenn ich das so mach wie du sagst bekomme ihc trotzdem in der endgültigen Textdatei nur
sonntag sonntag sonntag ect. hab das jetzt soo
Delphi-Quellcode:
function TForm1.SpeicherHilfe(Var Memo: TMemo ; StringListe : TStringList): TStringList;
var I : Integer ; Pruefstring : String; begin For i := 0 to Memo.Lines.Count-1 do begin Pruefstring := Memo.Lines[i]; if(Pruefstring <> '') and (Pruefstring <> 'Serien Termine') then StringListe.Add(Memo.Lines[i]) ; end; end; Trotzdem nur sonntag ... |
Re: Leerzeilen in Tstringlist
Ich hab mal was stumpf heruntergetippt, schau mal, ob das so funktioniert.
Delphi-Quellcode:
procedure TForm1.SpeichernClick(Sender: TObject);
var sResult :Tstringlist; procedure StripLines(const Titel: string; const sLines: TStrings); const sIgnore = 'Serien Termine' var i : integer; begin sResult.Add(Titel); for i := 0 to sLines.Count - 1 do if (sLines[i] <> '') and (sLines[i] <> sIgnore) then sResult.Add(sLines[i]); end; begin sResult := TStringlist.Create; try StripLines('Montag', Memo1.Lines); StripLines('Dienstag', Memo2.Lines); StripLines('Mittwoch', Memo3.Lines); StripLines('Donnerstag', Memo4.Lines); StripLines('Freitag', Memo5.Lines); StripLines('Samstag', Memo6.Lines); StripLines('Sonntag', Memo7.Lines); sResult.SaveToFile(Textdatei); finally sResult.Free; end; end; |
Re: Leerzeilen in Tstringlist
es klappt
ist gibt nur eins was mich stört wenn ich irgendiwe test123 Serien Termine blub eingebeen habe sollte ja - so von der idee her - nur test123 gespeichert werden er speichert aber test123 blub ps. ich wusste garnicht, dass man inerhalbt von Procedures weitere procedures anlegen kann :oops: :oops: |
Re: Leerzeilen in Tstringlist
Dann hab ich das falsch verstanden. OK, dann müsste das so gehen:
Delphi-Quellcode:
procedure StripLines(const Titel: string; const sLines: TStrings);
const sIgnore = 'Serien Termine' var i : integer; begin sResult.Add(Titel); for i := 0 to sLines.Count - 1 do if (sLines[i] <> '') and (sLines[i] <> sIgnore) then sResult.Add(sLines[i]) else break; end; |
Re: Leerzeilen in Tstringlist
vielen dank
hehe doch mit break xD |
Re: Leerzeilen in Tstringlist
Das geht auch ohne break :zwinker:
Delphi-Quellcode:
procedure StripLines(const Titel: string; const sLines: TStrings);
const sIgnore = 'Serien Termine' var i : integer; begin sResult.Add(Titel); i := 0; while (i < sLines.Count) and (sLines[i] <> '') and (sLines[i] <> sIgnore) do begin sResult.Add(sLines[i]); inc(i); end; end; |
Re: Leerzeilen in Tstringlist
ich bleib bei dem was klappt ^^
danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 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