AGB  ·  Datenschutz  ·  Impressum  







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

Leere MemoLines herausfiltern

Ein Thema von b0urb0nkid · begonnen am 6. Dez 2012 · letzter Beitrag vom 7. Dez 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von b0urb0nkid
b0urb0nkid

Registriert seit: 6. Dez 2012
4 Beiträge
 
#1

Leere MemoLines herausfiltern

  Alt 6. Dez 2012, 15:42
Delphi-Version: XE2
Moin Moin,
Ich schreibe gerade an einem Programm, welches mit einer selbsterstellten Config.txt arbeiten soll.
Diese lasse ich auslesen und splitte den Inhalt in verschiedene Memos auf.
Nun sind in den Memos am Ende immer Leerzeichen, welche ich herausfiltern wollte, da ich sonnst beim Einlesen wieder Probleme hab.
Mein Ansatz war:
Delphi-Quellcode:
procedure TFEinstellungen.BSpeichernClick(Sender: TObject);
var
  List: TStrings;
  i : integer;
  k : integer;
begin
  List := TStringList.Create;
  try
    List.Add('#Pfad der Vorlage');
    List.Add(EVor.Text);
    List.Add('#Pfad des neuen Ordners');
    List.Add(ENeu.Text);
    for i := 0 to MAnfangsDatum.Lines.Count-1 do
      if List[i] <> 'then
        List.Add(MAnfangsDatum.Lines[i]);
    for k := 0 to MEndDatum.Lines.Count-1 do
      if List[k] <> 'then
        List.Add(MEndDatum.Lines[k]);
    List.SaveToFile('*Beispielpfad*');
  finally
    List.Free;
  end;
  ShowMessage('Ihre Konfiguration wurde gespiechert.');
  Close;
end;
jedoch sind in der Config.txt trotzif List[i] <> 'then noch Leerzeichen.

Ich hoffe ihr könnt mir helfen
Gruß Hendrik
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Leere MemoLines herausfiltern

  Alt 6. Dez 2012, 15:46
if TRIM(MAnfangsDatum.Lines[i]) <> 'then
'' ist eine komplett leere Zeile
' ' ist eine Zeile mit einem Leerzeichen
' ' ist eine Zeile mit zwei Leerzeichen
etc ....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi ( 6. Dez 2012 um 17:05 Uhr) Grund: nicht aufgepasst :-(
  Mit Zitat antworten Zitat
Benutzerbild von b0urb0nkid
b0urb0nkid

Registriert seit: 6. Dez 2012
4 Beiträge
 
#3

AW: Leere MemoLines herausfiltern

  Alt 6. Dez 2012, 15:54
Vielen Dank Bummi!
Es haut jetzt hin mit ' ', wobei ich nicht ganz verstehe, warum eine eigentlich komplett leere Zeile (also nur Enter gedrückt) erst bei ' ' gelöscht wird und nicht bei ''.

Gruß Hendrik
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Leere MemoLines herausfiltern

  Alt 6. Dez 2012, 16:09
Delphi-Quellcode:
    for i := 0 to MAnfangsDatum.Lines.Count-1 do
      if List[i] <> 'then
        List.Add(MAnfangsDatum.Lines[i]);
Dir ist schon klar, daß Du Dich da auf ganz dünnem Eis bewegst?
i wird durch MAnfangsDatum.Lines.Count bestimmt und it i greifst Du auf List zu. Das kann ganz schnell zu unerwünschten Reaktionen führen.

gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

AW: Leere MemoLines herausfiltern

  Alt 6. Dez 2012, 16:12
Delphi-Quellcode:
{**************************************************************************
* NAME:    RemoveEmptyStrings
* DESC:    lösche leere Zeilen aus StringListe
* RESULT:  Anzahl der Löschungen
*************************************************************************}

function RemoveEmptyStrings(list : TStrings):Integer;
var
   i : Integer;
begin
   Assert(Assigned(list));
   Result := 0;
   for i := list.Count-1 downto 0 do
   begin
      if TrimRight(list[i]) = 'then
      begin
         list.Delete(i);
         Inc(Result);
      end;
   end;
end;
Die Funktion löscht rückwärts; hat also den Bug, den mein Vorposter angesprochen hat nicht.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von b0urb0nkid
b0urb0nkid

Registriert seit: 6. Dez 2012
4 Beiträge
 
#6

AW: Leere MemoLines herausfiltern

  Alt 6. Dez 2012, 16:36
Vielen Dank K-H!
Hatte ich vorher gar nicht bemerkt, was ich da für ein Mist zusammengeschrieben habe.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Leere MemoLines herausfiltern

  Alt 6. Dez 2012, 17:11
Ich spiele jetzt mal himitsu und gebe dir den Tipp:
Delphi-Quellcode:
      if Length(TrimRight(list[i])) = 0 then
      ...
Auf 0 kann besser geprüft werden als auf ''.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

AW: Leere MemoLines herausfiltern

  Alt 6. Dez 2012, 17:37
Auf 0 kann besser geprüft werden als auf ''.
Irrtum, der Stringvergleich auf '' ist effizienter als Length(s)=0.
Delphi-Quellcode:
var
   s : string;
begin
   s := Trim(' ');
   if s = 'then // rot markiert, 1 X86-Befehl
      ShowMessage('1');
   if Length(s) = 0 then // grün markiert, 3 X86-Befehle
      ShowMessage('2');
Miniaturansicht angehängter Grafiken
cpu_delphi_stringvergleich.gif  
Andreas
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#9

AW: Leere MemoLines herausfiltern

  Alt 6. Dez 2012, 17:53
Willst du behaupten, dass himitsu nicht die Wahrheit sagt?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

AW: Leere MemoLines herausfiltern

  Alt 6. Dez 2012, 18:07
Willst du behaupten, dass himitsu nicht die Wahrheit sagt?
Ähh ... natürlich nicht.
Die 3 Assemblerbefehle sind insgesamt viel schneller als der eine lausige Cmp-Befehl.
Ausserdem brauchen die 3 Befehle auch weniger Platz im RAM.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:09 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