Delphi-PRAXiS

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.).

Bernhard Geyer 18. Jan 2010 18:04

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

Zitat von Alex.P
Notepad++ sagt es ist ANSI

Und was sagt notepad von Windows?

Alex.P 18. Jan 2010 18:05

Re: ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
Ich möchte mir die Files direkt vom Programm anzeigen lassen um sie nicht im Filesystem suchen zu müssen.
Ich brauch was schnelles und unkompliziertes um die Fehlersuche zu erleichtern.

Alex.P 18. Jan 2010 18:07

Re: ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
Hab kein Windows Notepad nur Windows Wordpad und das sagt Textfile.

Luckie 18. Jan 2010 19:10

Re: ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
Hast du den Windows eigenen Texteditor deinstalliert oder warum hast du kein Notepad?

Bernhard Geyer 18. Jan 2010 19:51

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

Zitat von Alex.P
Hab kein Windows Notepad nur Windows Wordpad und das sagt Textfile.

Wenn du Windows hast, hast du auch notepad! Wüsste nicht das man dies von der Installation ausnehmen könnte.

himitsu 18. Jan 2010 20:02

Re: ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
"öffentlich" nennt der sich nur nicht Notepad.

im deutschen Windows: Startmenü > Programme > Zubehör > Editor

Bernhard Geyer 18. Jan 2010 20:10

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

Zitat von himitsu
"öffentlich" nennt der sich nur nicht Notepad.

im deutschen Windows: Startmenü > Programme > Zubehör > Editor

Stimmt ja. :wall: Nachdem ich es immer nur durch Eingabe von "notepad" in der Eingabeaufforderung start ...

Alex.P 19. Jan 2010 09:15

Re: ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
Hat sich versteckt...
System32\Notepad.exe sagt das gleiche wie Notepad++ --> ANSI

p80286 19. Jan 2010 12:28

Re: ListBox.Items.LoadFromFile geht nur bis NULL Zeichen
 
Hallo Alex,

wenn Du ein log für eine Terminalsitzung oder ähnliches erstellst, rate ich Dir nicht mit writeln sondern mit write zu arbeiten, da mit writeln "falsche" 0x0D und 0x0A in Deine Log-Datei kommen.

Beim Auslesen mußt Du dann einen Filter für gültige Zeichnen einbauen und die ungültigen mit einem . oder ggf. mit einem Symbol z.B. BS,CR etc. kennzeichnen.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:11 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