Autor Beitrag
crncpz
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 59

WIN 2000, WIN XP Pro
Delphi 6
BeitragVerfasst: Do 06.09.07 22:54 
Ich bekomme von einer Datenbank
einen bestimmten Datensatz als Textfile geliefert und möchte diesen
in meinem Programm weiter verarbeiten.

Wenn ich mir nun besagtes Textfile im notepad ansehe stelle ich fest
das an diversen stellen rechteckige Symbole zu sehen sind.
Diese stehen stellvertretend für ein "Enter" bei einer Eingabe in der Datenbank.

Mein Problem ist nun folgendes:

wenn ich in meinem Programm dieses Textfile einlese,
dabei ist es egal ob ich das mit einem TMemo oder mit
assign-reset-read tue,
rutscht der Teil der Zeile, der sich hinter diesem Zeichen befindet
in die nächste Zeile.

Wodurch ich natürlich ein bedingtes Problem bekomme.

Ich hab dieses Problem schon gelöst in dem ich definiert habe mit was eine Zeile anfangen darf.
Wenn das nicht der Fall ist wird die Zeile an das Ende der letzten Zeile angehangen.
Das funktioniert auch super.

Nun möchte ich gern wissen ob man sowas auch anders lösen kann?
Und warum bzw wie kann notepad genau das verhindern das eine weitere
Zeile vorhanden ist?

danke für die Hilfe


Moderiert von user profile iconAXMD: Topic aus Internet / Netzwerk verschoben am Fr 07.09.2007 um 14:11
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 07.09.07 01:03 
Notepad kommt mit Unix-Zeilenumbrüchen nicht klar; TMemo aber schon (bzw. besser gesagt, die VCL). D.h. die VCL macht beim Einlesen des Strings automatisch aus dem #13 ein Windows-konformes #13#10 und bricht dann die Zeile um.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Fr 07.09.07 05:59 
user profile iconcrncpz hat folgendes geschrieben:
Ich bekomme von einer Datenbank
einen bestimmten Datensatz als Textfile geliefert und möchte diesen
in meinem Programm weiter verarbeiten.

Wenn ich mir nun besagtes Textfile im notepad ansehe stelle ich fest
das an diversen stellen rechteckige Symbole zu sehen sind.
Diese stehen stellvertretend für ein "Enter" bei einer Eingabe in der Datenbank.



Hallo,

bevor du weiter planst, solltest du erstmal klären was das für ein ASCII-Zeichen ist (da kommen mehrere in Frage) und ob es wirklich nur ein Trennzeichen ist, dann kannst du das Zeichen rausfiltern oder mit einem Komma ersetzen oder was immer du willst. Im übrigen ist es ja von Vorteil, wenn die Felder der Datenbank durch ein Trennzeichen voneinander zu unterscheiden sind.

Gruss Reinhard
crncpz Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 59

WIN 2000, WIN XP Pro
Delphi 6
BeitragVerfasst: Fr 07.09.07 08:25 
Es ist ja kein Trennzeichen zwischen 2 Angaben.

Es tritt genau an der Stelle im Datensatz wo es laut Hilfe zu erwarten ist,
wenn man im dem Memo in der Datenbank Oberfläche mehrere Zeilen ein trägt.

Wie ist es möglich ein solches Zeichen selbst zu schreiben.
Die Datenbank kann es ja auch irgendwie. :P

mfg
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Fr 07.09.07 18:09 
user profile iconcrncpz hat folgendes geschrieben:
Es ist ja kein Trennzeichen zwischen 2 Angaben.

Es tritt genau an der Stelle im Datensatz wo es laut Hilfe zu erwarten ist,
wenn man im dem Memo in der Datenbank Oberfläche mehrere Zeilen ein trägt.

Wie ist es möglich ein solches Zeichen selbst zu schreiben.
Die Datenbank kann es ja auch irgendwie. :P

mfg


Verstehe ich richtig: das Zeichen trennt die Zeilen innerhalb des Memos? Das hat hier schon jemand wenigstens zum Teil beantwortet, der Text enthält nicht die windows-übliche CR-LF-Sequenz, sondern z.B. unix-üblich nur LF. Die must du halt gleich beim Einlesen zu CR-LF ergänzen.

Um herauszufinden, was wirklich in der Datei steht, kannst du sie mit jedem Hexeditor betrachten oder du lässt dir den String vom Delphi-Debugger anzeigen, da steht dann für LF hex 0A (= dezimal 10). Das Zeichen LF kannst du definieren mit chr(10) oder innerhalb einer Stringkonstante, aber ausserhalb der Anführungszeichen mit #10. Ein 2zeiliger String sieht dann so aus:

MyString2 := 'hello world'#13#10'how are you?'#13#10;

Umgekehrt bekommst du die ASCII-Nummer eines Zeichens mit ord, also

MyASCII := ord (MyString[12]); liefert 13.

Gruss Reinhard