![]() |
Problem mit Leerzeile in einer TStringlist!
Hallo,
ich lese eine UTF8 Textdatei in eine Stringliste ein (D2007). Diese wandle ich vorher mit sl[i] := Utf8ToAnsi(sl[i]); in Ansi um. Jetzt will ich bei der Verarbeitung alle Leerzeilen ignorieren und alle Zeilen, wo das erste Zeichen ein Blank ist:
Delphi-Quellcode:
Leider bekomme ich direkt bei der ersten Leerzeile eine Exception:
if (sl[j][1] <> ' ') AND (length(trim(sl[j]))>0) then
Zitat:
Viele Grüße ... |
Re: Problem mit Leerzeile in einer TStringlist!
Zitat:
Delphi-Quellcode:
Damit dürfte im Falle einer Leerzeile bereits der erste Ausdruck false ergeben und die if-Abfrage direkt abgebrochen werden.
if (length(trim(sl[j]))>0) and (sl[j][1] <> ' ') then
|
Re: Problem mit Leerzeile in einer TStringlist!
:wall: guten morgen
|
Re: Problem mit Leerzeile in einer TStringlist!
und dann auch aufpassen, daß nicht wer diese eine ganz böse Compiler-Option aktiviert,
welche sich da "Vollständige Boolean-Auswertung" schimpft oder irgendwie so |
Re: Problem mit Leerzeile in einer TStringlist!
AFAIK kann man das Problem dann aber mit
Delphi-Quellcode:
umgehen.
if length(trim(sl[j]))>0 then
if sl[j][1] <> ' ' then |
Re: Problem mit Leerzeile in einer TStringlist!
Das Problem mit den Leerzeilen gibt es öfters.
Was macht man, wenn man ein Problem öfters hat? Man löst es allgemeingültig:
Delphi-Quellcode:
// 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; |
Re: Problem mit Leerzeile in einer TStringlist!
Delphi-Quellcode:
wäre wohl besser
Assert(list is TStrings);
|
Re: Problem mit Leerzeile in einer TStringlist!
Zitat:
List ist vom Typ TStrings, also die Typprüfung kann der Compiler schon @compiletime abhaken, somit bleibt die reine Prüfung auf <> nil übrig. Dies wiederrum entspricht genau dem von shmia geposteten Code - nur das deiner mehr Overhead hat. Und von daher bin ich mal gespannt auf deine Begründung... |
Re: Problem mit Leerzeile in einer TStringlist!
Ich sach mal so:
Assert(Assigned(list)) schützt vor fahrlässigem Gebrauch. Der dubbelige Programmier hat vergessen, das Objekt zu erzeugen. Assert(list is TStrings) schützt vor bösartigem Gebrauch. Der Programmierer ist ganz schlecht drauf und ruft die Procedure z.B. so auf:
Delphi-Quellcode:
Also ich bin eigentlich immer nur fahrlässig; das bösartige überlass' ich den anderen. :cheers:
RemoveEmptyStrings(TStrings(Memo1));
|
Re: Problem mit Leerzeile in einer TStringlist!
die Begründung: Programmierer sind böse :twisted:
wie wär's wenn ich der Funktion ein TEdit unterschiebe? [edit] menooooo [add] OK, man muß auch nicht immer böse sein ... das Objekt vergessen und eine uninitialisierte Variable wäre auch möglich das Assert deckt da nur 1 von 4 Milliarden Fällen ab ... IS dageben wesentlich mehr (denn dieses muß zufällig auf 'nen Bereich zeigen, welcher noch zusälliger einer passenden Instanz gleicht) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:37 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