AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit Leerzeile in einer TStringlist!
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Leerzeile in einer TStringlist!

Ein Thema von Grolle · begonnen am 21. Okt 2009 · letzter Beitrag vom 22. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#1

Problem mit Leerzeile in einer TStringlist!

  Alt 21. Okt 2009, 12:05
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:
if (sl[j][1] <> ' ') AND (length(trim(sl[j]))>0) then Leider bekomme ich direkt bei der ersten Leerzeile eine Exception:
Zitat:
Erste Gelegenheit für Exception bei $7C812AFB. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 0067FC6A in Modul 'visu.exe'. Lesen von Adresse 00000000'. Prozess visu.exe (2424)
Wie kann ich das abfangen?

Viele Grüße ...

  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Problem mit Leerzeile in einer TStringlist!

  Alt 21. Okt 2009, 12:09
Zitat von Grolle:
Wie kann ich das abfangen?
Dreh die Abfrage einfach um:
if (length(trim(sl[j]))>0) and (sl[j][1] <> ' ') then Damit dürfte im Falle einer Leerzeile bereits der erste Ausdruck false ergeben und die if-Abfrage direkt abgebrochen werden.
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Problem mit Leerzeile in einer TStringlist!

  Alt 21. Okt 2009, 12:11
guten morgen

  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: Problem mit Leerzeile in einer TStringlist!

  Alt 21. Okt 2009, 13:40
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
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#5

Re: Problem mit Leerzeile in einer TStringlist!

  Alt 21. Okt 2009, 15:02
AFAIK kann man das Problem dann aber mit
Delphi-Quellcode:
if length(trim(sl[j]))>0 then
  if sl[j][1] <> ' then
umgehen.
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
shmia

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

Re: Problem mit Leerzeile in einer TStringlist!

  Alt 21. Okt 2009, 17:16
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;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: Problem mit Leerzeile in einer TStringlist!

  Alt 21. Okt 2009, 18:00
Assert(list is TStrings); wäre wohl besser
$2B or not $2B
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: Problem mit Leerzeile in einer TStringlist!

  Alt 21. Okt 2009, 18:33
Zitat von himitsu:
Assert(list is TStrings); wäre wohl besser
Und die Begründung für diese Behauptung wäre dabei welche?

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...
  Mit Zitat antworten Zitat
shmia

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

Re: Problem mit Leerzeile in einer TStringlist!

  Alt 21. Okt 2009, 18:41
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:RemoveEmptyStrings(TStrings(Memo1)); Also ich bin eigentlich immer nur fahrlässig; das bösartige überlass' ich den anderen.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

Re: Problem mit Leerzeile in einer TStringlist!

  Alt 21. Okt 2009, 18:41
die Begründung: Programmierer sind böse

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)
$2B or not $2B
  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 04:15 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