[gelöst] Überlange Zeilen beim Einlesen einer Textdatei

6. Oktober 2008 09:44

Heyho,

ich stehe vor der Aufgabe, eine Textdatei einzulesen und die relevanten Daten in Records zu gießen. Das klappt auch schon ganz gut. Die Datei wird zeilenweise im Text-Modus als Textvariable [Text1024] eingelesen und diese Variable wird dann zerpflückt.

Leider gibt es in der Textdatei Zeilen, die länger als 1024 Zeichen sein können, sodaß die Verarbeitung mit einem Typüberlauf abbricht :-(

Da diese überlangen Zeilen sowieso keine relevanten Daten enthalten, würde ich sie gerne überspringen, bzw. würde ich gerne in der Textdatei bis zu einem gewissen Schlüsselwort "vorspulen", ohne die ganzen Zeilen bis zu diesem Schlüsselwort einzeln abklappern zu müssen.

Welche Möglichkeiten gibt es da?

Grüße
Thomas
Zuletzt geändert von ThomasFerstl am 6. Oktober 2008 16:01, insgesamt 1-mal geändert.

Re: Überlange Zeilen beim Einlesen einer Textdatei

6. Oktober 2008 09:56

Das klingt so, als würdest du dafür einen Dataport verwenden.
Wenn du anstelle der Dataport-Funktionalität mittels FILE-Variable die Datei manuell verarbeitest, dann hast du (fast) die volle Kontrolle über deinen Dateizeiger sowie der Anzahl einzulesender bzw. tatsächlich eingelesener Zeichen.
Ebenso kannst du nach belieben "vor-" und "zurückspulen".

Re: Überlange Zeilen beim Einlesen einer Textdatei

6. Oktober 2008 10:15

Timo Lässer hat geschrieben:Das klingt so, als würdest du dafür einen Dataport verwenden.


Nein, ich benutze eine selbstgeschriebene Import-Funktion auf einer Form.

Die FILE-Variable wird im TEXTMODE geöffnet und zeilenweise in eine Textvariable der Länge 1024 eingelesen. So kann ich den eingelesenen Text bequem auf bestimmte Wörter abklappern und ggf. weiter zerpflücken.

Mein Problem besteht eigentlich darin, daß es in dieser FILE-Variable eben Zeilen gibt, die größer als 1024 Zeichen sind und ich in Navision aber keine größeren Textvariablen anlegen kann. Wenn ich nun wüßte, wie ich es am geschicktesten mache, würde ich ja diese überlangen Zeilen gleich ignorieren oder lediglich die ersten 1024 Zeichen einlesen und den Rest unter den Tisch fallen lassen. Leider bekomme ich im Moment einen Laufzeitfehler bei der Typkonvertierung von Text zu Text (da ich versuche, mehr Zeichen in eine Variable zu lesen, als diese Aufnehmen kann).

Kann ich die eingelesene Zeile "zurechtschneiden", BEVOR ich sie der Textvariable zuweise? Die Datei, von der wir sprechen, hat ca. 18 bis 20 MB Umfang. Der relevante Teil liegt jedoch im unteren Viertel. Ich kann mich lediglich an einem bestimmten Wort in dieser Textdatei orientieren, um zu erkennen, wo der relevante Bereich anfängt. Um diese Stelle aber herauszufinden, muß ich die Textzeilen aber doch erst eingelesen haben, oder?

Re: Überlange Zeilen beim Einlesen einer Textdatei

6. Oktober 2008 10:28

Kannst du nicht eine BigText-Variable verwenden?
Die kann nämlich bis zu 2GB Text aufnehmen.

Re: Überlange Zeilen beim Einlesen einer Textdatei

6. Oktober 2008 11:26

Das war auch mein erster Gedanke. Nur habe ich dann den Nachteil, daß ich diesen BigText nicht einfach wie eine gewöhnliche Textvariable weiterverarbeiten kann ...

Re: Überlange Zeilen beim Einlesen einer Textdatei

6. Oktober 2008 14:02

Mal ein anderer Gedanke ... wenn ich die Datei statt mit TEXTMODE=TRUE mit TEXTMODE=FALSE einlesen, dann wird ja immer nur soviel Text gelesen, wie in der Variable Platz hat, also niemals mehr als 1024 Zeichen. Das würde mein Problem mit den überlangen Textzeilen lösen. Ich muß dann nur noch herausfinden, wo die einzelnen Zeilen anfangen und wo sie enden.

Wie kann ich überprüfen, ob in einer Textvariable ein CR und LF enthalten ist?

Re: Überlange Zeilen beim Einlesen einer Textdatei

6. Oktober 2008 14:37

ThomasFerstl hat geschrieben:Wie kann ich überprüfen, ob in einer Textvariable ein CR und LF enthalten ist?

z. B. so: (nicht getestet)
Code:
CR := 13;  // Char
LF := 10;  // Char
IF (STRPOS(ImportLine,FORMAT(CR)) <> 0) OR STRPOS(ImportLine,FORMAT(LF)) <> 0) THEN
  [...]

Re: Überlange Zeilen beim Einlesen einer Textdatei

6. Oktober 2008 16:01

Danke für die vielen Antworten!

Re: [gelöst] Überlange Zeilen beim Einlesen einer Textdatei

24. September 2009 09:33

Hallo,
ist irgendwo dokumentiert, wie das Lesen einer Datei genau funktioniert?
Ich habe zwar einen Code entworfen, der einigermassen funktioniert, aber bestimmt nicht perfekt ist.
Die Anregungen zu dem Code habe ich aus mibuso.

Re: [gelöst] Überlange Zeilen beim Einlesen einer Textdatei

25. August 2010 08:13

Hier eine Lösung:
Marije Brummel: Tip #30 | Reading 1000 + Characters from a File