[Gelöst] Während Dataport Log Datei schreiben

2. August 2007 15:21

Hallo zusammen...

ich lese schon lange in Eurem Forum und Ihr habt mir schon oft bei Problemen geholfen ohne das ich fragen musste. Nun ist es aber soweit.
Ich schreibe gerade einen Artikelimport für Navision 4.0 SP3 und während des Imports sollen alle Unannehmlichkeiten, wie zB doppelte Herstellerartikelnummern, entfallene Artikel usw. in einer externen Log-Datei gespeichert werden.
Das ist auch soweit kein Problem...
Code:
LogFile.CREATE('C:\log_'+CONVERTSTR(FORMAT(TODAY),' ','_')+'.txt');
IF (NOT LogFile.OPEN('C:\log_'+CONVERTSTR(FORMAT(TODAY),' ','_')+'.txt')) THEN
  ERROR(Text000,'C:\log_'+CONVERTSTR(FORMAT(TODAY),' ','_')+'.txt');
IM_WriteLog('Import gestartet durch '+ USERID +' . . .');


>> IM_WriteLog(Message : Text[250])
LogFile.WRITE(FORMAT(TODAY)+' '+FORMAT(TIME)+' - '+Message+'');

Das schreiben klappt auch soweit ganz toll nur, wie bekomme ich einen Zeilenumbruch hin? Ich habe schon "\n", "\" und "\ " probiert und nun fällt mir nichts mehr ein. Alle neuen Nachrichten werden einfach hinten dran geschrieben anstatt in eine neue Zeile zu rutschen.

Könnt Ihr mir vielleicht helfen?

Danke Christoph
Zuletzt geändert von Christoph am 15. August 2007 19:01, insgesamt 1-mal geändert.

2. August 2007 15:41

Ich glaube, du musst pro Zeile je ein WRITE aufrufen, da nach jedem WRITE automatisch ein Zeilenumbruch generiert wird.

2. August 2007 15:41

Schau doch mal in die Online-Hilfe zu WRITE bzw. TEXTMODE.

2. August 2007 15:42

Hi,

definiere die eine TextVariable mit Länge 2 und "bestücke" diese wie folgt:
Code:
Textvar[1] := 13;
Textvar[2] := 10;


Damit wird der Textvariablen mit den ASCII-Wert für CR (13) und LF (10) bestückt. Die hängts du einfach noch hinten an den String an und das wars.

Alternativ kannst du auch zwei Variablen vom Typ "Char" definieren und der einen den Wert 13 und der anderen den Wert 10 zuweisen, und dan die beiden anhängen.

Oder du benutzt TEXTMODE(TRUE), oder du benutzt einen OutStream und WRITETEXT....


ich mach das meist so:
Code:
FSFile.TEXTMODE(TRUE);
FSFile.WRITEMODE(TRUE);
FSFile.QUERYREPLACE(FALSE);
FSFile.CREATE('c:\SP_Block.txt');
FSFile.CREATEOUTSTREAM(OutStream);
OutStream.WRITETEXT(<Text1>);
OutStream.WRITETEXT(<Text2>);
OutStream.WRITETEXT(<Text3>);
OutStream.WRITETEXT(STRSUBSTNO('%1%2',CR,LF));  // Hier erfolgt der Umbruch
FSFile.CLOSE;


CR und LF sind die oben angesprochenen Variablen vom Typ "Char".

Gruß,
Rolf

p.s. der OPEN nach dem CREATE ist eigentlich überflüssig. Der CREATE öffnet die Datei bereits.

2. August 2007 16:03

Wow danke für die schnelle Hilfe... habs jetzt so wie rkaufmann gemacht :)