[GELÖST] Text an bestehende Dateien anhängen

Bild Microsoft Dynamics NAV 2017

[GELÖST] Text an bestehende Dateien anhängen

Beitragvon TSO_MB » 15. Januar 2019 14:30

Hallo zusammen,

Text an bestehende Dateien anzuhängen sollte mit den SEEK und LEN Membern von File-Variablen eigentlich kein Problem sein. Verwende ich unter NAV 2016 nur die Methoden der File Variable, habe ich das NULL Zeichen Problem. NAV hängt mir dann das Zeichen NULL an jede geschriebene Textzeile an. Arbeite ich dagegen mit Streams, funktioniert das Schreiben zwar ohne das NULL Zeichen Problem, doch der Dateizeiger ist im Stream offensichtlich nicht ausgereichtet. Als Ergebnis überschreibe ich jedes Mal Daten, anstelle die neuen Daten ans Dateiende anzuhängen. Früher ging das sogar direkt mit einer File-Variable ohne Probleme, doch da gab es auch noch nicht das NULL Zeichen Problem.

Eine andere Variante wäre vielleicht, direkt .NET Klassen zu verwenden. Muss ich diesen Ansatz zwingend verwenden, oder bekomme ich das auch mit den Standard NAV Bordmitteln per File-Variable und Outstream-Variable hin?

Vielleicht hat hier im Forum jemand eine Idee. Ich poste mal meinen bisherigen Quelltext:
Code: Alles auswählen
WriteNoteToFile(Filename : Text;MessageText : Text;WriteTimestamp : Boolean)
CLEAR(OutFile);
CLEAR(OStream);
OutFile.WRITEMODE := TRUE;

CRLF := '  ';
CRLF[1] := 13;
CRLF[2] := 10;

IF EXISTS(Filename) THEN BEGIN
  OutFile.OPEN(Filename, TEXTENCODING::Windows);
  OutFile.SEEK(OutFile.LEN);
END ELSE
  OutFile.CREATE(Filename, TEXTENCODING::Windows);
OutFile.CREATEOUTSTREAM(OStream);

IF WriteTimestamp THEN
  OStream.WRITETEXT(STRSUBSTNO('%1 %2 %3', TODAY, TIME, MessageText))
ELSE
  OStream.WRITETEXT(MessageText);
OStream.WRITETEXT(CRLF);

OutFile.CLOSE;


Lokale Variablen der Funktion:
Code: Alles auswählen
OutFile: File
CRLF: Text[2]
OStream: OutStream


GruĂź,
Marc
Zuletzt geändert von TSO_MB am 17. Januar 2019 09:48, insgesamt 1-mal geändert.
TSO_MB
 
Beiträge: 8
Registriert: 10. September 2014 13:33
Realer Name: Marc Beischmid
Arbeitsort: TSO-DATA GmbH, OsnabrĂĽck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Text an bestehende Dateien anhängen

Beitragvon fiddi » 15. Januar 2019 14:46

Hallo,

hast du schon mal
Code: Alles auswählen
OutFile.TEXTMODE := TRUE

vor dem öffnen probiert?

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7095
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: Text an bestehende Dateien anhängen

Beitragvon TSO_MB » 17. Januar 2019 09:46

Hallo Fiddi,

sorry für die späte Antwort. Habe irgendwie keine E-Mail bekommen und jetzt mal auf "Thema beobachten" geklickt.

Habe Deinen Vorschlag ausprobiert. Das ist jetzt ganz interessant:
Mit Streams funktioniert auch diese Variante nicht. Allerdings habe ich auch mal folgendes in einer separaten Funktion "WriteNoteToFile3" probiert:
Code: Alles auswählen
WriteNoteToFile3(Filename : Text;MessageText : Text;WriteTimestamp : Boolean)
CLEAR(OutFile);
OutFile.WRITEMODE := TRUE;
OutFile.TEXTMODE := TRUE;

CRLF := '  ';
CRLF[1] := 13;
CRLF[2] := 10;

IF EXISTS(Filename) THEN BEGIN
  OutFile.OPEN(Filename, TEXTENCODING::Windows);
  OutFile.SEEK(OutFile.LEN);
END ELSE
  OutFile.CREATE(Filename, TEXTENCODING::Windows);

IF WriteTimestamp THEN
  OutFile.WRITE(STRSUBSTNO('%1 %2 %3', TODAY, TIME, MessageText))
ELSE
  OutFile.WRITE(MessageText);
OutFile.WRITE(CRLF);

OutFile.CLOSE;
Aufruf:
Code: Alles auswählen
WriteNoteToFile3('c:\temp\TestFile_direkt.txt', 'Testnachricht4', TRUE);
Ergebnisdatei (Datei vorher gelöscht und Funktion danach dreimal ausgeführt):
Code: Alles auswählen
17.01.19 08:28:26 Testnachricht4


17.01.19 08:28:35 Testnachricht4


17.01.19 08:28:42 Testnachricht4


Das NULL-Problem ist bei direkter Verwendung ohne Streams im Textmode offenbar nicht mehr vorhanden. DafĂĽr macht CRLF nun Probleme. Ich habe das letzte WRITE mit dem CRLF auskommentiert und danach funktionierte es ohne Probleme. Interessant ist jedoch, dass Streams offensichtlich ĂĽberhaupt nicht von SEEK beeinflusst werden. Aber so funktioniert es und wenn die Datei nicht zu groĂź wird, hilft das auch weiter. Vielen Dank fĂĽr den Tipp.

GruĂź
Marc
TSO_MB
 
Beiträge: 8
Registriert: 10. September 2014 13:33
Realer Name: Marc Beischmid
Arbeitsort: TSO-DATA GmbH, OsnabrĂĽck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV


ZurĂĽck zu NAV 2017

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast