Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ListBox.Items.LoadFromFile geht nur bis NULL Zeichen (https://www.delphipraxis.net/146355-listbox-items-loadfromfile-geht-nur-bis-null-zeichen.html)

Alex.P 18. Jan 2010 16:39


ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
Hallo,

ich möchte eine Text Datei komplett einlesen und in einer ListBox anzeigen.
Die Textdatei kann allerdings alle möglichen Zeichen ethalten.
Ab dem ersten NULL Zeichen wird nichts mehr in die Listbox geschrieben.

Gibt es da eine Möglichkeit ohne, daß ich das Textfile ändere.

Greetz
Alex

p80286 18. Jan 2010 16:43

Re: ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
Na klar gibt es da Möglichkeiten, aber das Einlesen bis zum ersten 0x00 ist eigentlich ungewöhnlich. Das wäre Stringende und nicht Dateiende.
Könnte es sein, daß die Größe der Datei nicht stimmt?

Gruß
K-H

Alex.P 18. Jan 2010 16:54

Re: ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
Dateigröße sollte in Ordung sein.
Die Datei wurde vorher vom Programm mit AssignFile und Writeln erstellt.
Die Zeichenkette, die das Laden abbricht ist in Notepad++ "NUL NUL BS BS CAN BEL"
Die Zeichen werden im Windows Editor nicht angezeigt.

Luckie 18. Jan 2010 17:06

Re: ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
Zitat:

Zitat von p80286
Na klar gibt es da Möglichkeiten, aber das Einlesen bis zum ersten 0x00 ist eigentlich ungewöhnlich. Das wäre Stringende und nicht Dateiende.

Richtig. Aber der Inhalt einer Listbox wird wie eine Zeichenkette mit Zeilenumbrüchen behandelt. Und 0x00 definiert unter Windows bzw. C/C++ das Ende einer Zeichenkette.

Eine Lösung wäre die Datei zeilenweise einzulesen und jede Zeile einzel in die Listbox einzufügen. Oder man speichert es gleich so ab, dass eben keine 0x00 Zeichen innerhalb der Zeichenkette vorkommen.

p80286 18. Jan 2010 17:16

Re: ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
Zitat:

Zitat von Alex.P
Dateigröße sollte in Ordung sein.
Die Datei wurde vorher vom Programm mit AssignFile und Writeln erstellt.
Die Zeichenkette, die das Laden abbricht ist in Notepad++ "NUL NUL BS BS CAN BEL"
Die Zeichen werden im Windows Editor nicht angezeigt.

Ich hab die Hexwerte nicht mehr im Kopf, aber das sieht so aus als hättest du eine Terminalsitzung mitgeschnitten.
Wenn Du
Code:
'Das ist text'
mit writeln schreibst, dann steht
Code:
 Das ist text0x0D0x0A
in der Datei. Seit seligen Dos-Zeiten sind Zeichen wie BEL oder BS eigentlich überflüssig (in Text-Dateien).

Gruß
K-H

[edit]Die Datei würde mich mal interessieren[/edit]
[edit1] Ich hab nicht mehr an die Feinheiten bei Tstrings und string gedacht![/edit1]

Alex.P 18. Jan 2010 17:41

Re: ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
@p80286 Du hast es erraten was ich hier mache.

Ich hab jetzt an der Datenspeicherung angesetzt.
for i := 0 to Length(LogString) do
if LogString[i] = NULL then LogString[i] := ' ';

entfernt fast alle NUL Zeichen, komischerweise nicht alle. :gruebel:
Ich hätt die LogFiles eigendlich gern zu 100% wie die Daten aus der Leitung kommen.

Bernhard Geyer 18. Jan 2010 17:46

Re: ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
Kann es sein das du eine Unicode-Textdatei hast? Öffne Sie mal im Notepad und gehe dann auf speichern unter. WElche Codierung wird im "Speichern unter" Dialog angeboten?

p80286 18. Jan 2010 17:52

Re: ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
Zitat:

Zitat von Alex.P
Ich hätt die LogFiles eigendlich gern zu 100% wie die Daten aus der Leitung kommen.

warum dann mit einer Listbox arbeiten?
Da bietet sich doch eher so etwas wie ein Hexeditor an. Den gibt es zwar nicht als Standardkomponente aber er ist doch relativ schnell geschrieben.

Gruß
K-H

Alex.P 18. Jan 2010 17:57

Re: ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
Notepad++ sagt es ist ANSI

himitsu 18. Jan 2010 18:01

Re: ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
Die gekapselten Windows-Komponenten sind in C geschrieben, also ist die #0 das Ende.

Delphi hört deßhalb, aus Kompatiblitätsgründen, auch bei einer #0 auf mit Einlesen (für TStringList und Co.).


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:25 Uhr.
Seite 1 von 2  1 2      

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