AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Leerzeilen in Tstringlist

Ein Thema von gangs-taas · begonnen am 29. Jul 2009 · letzter Beitrag vom 30. Jul 2009
Antwort Antwort
Seite 1 von 3  1 23      
gangs-taas

Registriert seit: 24. Mär 2009
364 Beiträge
 
#1

Leerzeilen in Tstringlist

  Alt 29. Jul 2009, 23:31
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 ) Helfen

lg

Delphi-Quellcode:
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;
ps. ich hab mir sogar mühe gegeben es zu formatieren ^^
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

Re: Leerzeilen in Tstringlist

  Alt 29. Jul 2009, 23:49
Erster Eindruck:
  • benutze i statt zeilenzaehler in den Schleifen (dann musst du dich nicht mehr um das zurücksetzen kümmern)
  • die Schleifen dürfen nur bis Memo.Lines.Count-1 gehen
  • in deinen if-then-Anweisungen brichst du du bei beiden Bedingungen die Schleife komplett ab (break, bei der Leerzeile wäre continue von Nöten (oder du kannst dann auch einfach Garnichts tuen))
  • nach break oder continue werden keine weiteren Anweisungen in dem Schleifendurchlauf durchgeführt (zeilenzaehler wird nie zurückgesetzt)
  • bei einer Leerzeile ist [i]Memo.Lines = ''

MfG,
Bug
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
gangs-taas

Registriert seit: 24. Mär 2009
364 Beiträge
 
#3

Re: Leerzeilen in Tstringlist

  Alt 30. Jul 2009, 09:17
okay
ich versuchs ^^
hoffentlich klappt das ^^
  Mit Zitat antworten Zitat
gangs-taas

Registriert seit: 24. Mär 2009
364 Beiträge
 
#4

Re: Leerzeilen in Tstringlist

  Alt 30. Jul 2009, 09:35
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Leerzeilen in Tstringlist

  Alt 30. Jul 2009, 09:40
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
gangs-taas

Registriert seit: 24. Mär 2009
364 Beiträge
 
#6

Re: Leerzeilen in Tstringlist

  Alt 30. Jul 2009, 09:44
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 )
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Leerzeilen in Tstringlist

  Alt 30. Jul 2009, 09:47
Und so?Zwischenspeicher.Add(trim(DiString.Text)); // das Gleiche für die anderen Listen Übrigens machst Du zig mal quasi dasselbe, das würde ich in eine Funktion auslagern.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
gangs-taas

Registriert seit: 24. Mär 2009
364 Beiträge
 
#8

Re: Leerzeilen in Tstringlist

  Alt 30. Jul 2009, 09:52
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Leerzeilen in Tstringlist

  Alt 30. Jul 2009, 09:55
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#10

Re: Leerzeilen in Tstringlist

  Alt 30. Jul 2009, 10:02
Hallo,

auch wenn schon eine Lösung da ist, mal ein anderer Ansatz: (bin halt mal wieder langsamer als DeddyH )

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:
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 Terminethen begin
    Eingabe.Delete(Eingabe.Count - 1);
  end;
  Result := Eingabe.Text;
end;
Im Programm dann so aufrufen:
Delphi-Quellcode:
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;
(Das ist jetzt nur so hingedaddelt und nicht getestet.)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz