[Gelöst] Zeilenumbruch entfernen bei Text Export

17. Februar 2021 10:04

Guten Morgen,

Ich exportiere Artikel in eine Textdatei.

Dabei gibt es einige Artikel welche im NAV Feld scheinbar einen Zeilenumbruch haben. Zumindest wird in der Text Datei die Zeile umgebrochen.

Nun habe ich vor dem Export versucht dies zu formatieren:

Code:
cr := 13 ;
lf := 10 ;
tab := 9;
FieldToClean := DELCHR(FieldToClean,'=',FORMAT(cr)) ;
FieldToClean := DELCHR(FieldToClean,'=',FORMAT(lf)) ;
FieldToClean := DELCHR(FieldToClean,'=',FORMAT(tab)) ;


Leider wird die Zeile immer noch umgebrochen.

z.B.:
ArtikelNr123 FM Mein Artikel ist so cool dann erhalte ich nach dem Export:


Artikelnr999,BeschreibungArtikel999¶
ArtikelNr123,¶
FM Mein Artike¶
ist so cool¶
Artikelnr456,BeschreibungArtikel456¶
Artikelnr789,BeschreibungArtikel789¶


Demnach ist das Zeichen welches den Umbruch verursacht im Text am Anfang in der Mitte und am Ende,
wie kann ich heraus finden um was für ein zeichen es sich hier handelt?

Wenn ich das Feld aus NAV mit STRG+C kopiere, und in den Texteditor einfüge, erhalte ich auch die Umbrüche.

Vielen Dank
Zuletzt geändert von elTorito am 17. Februar 2021 15:03, insgesamt 1-mal geändert.

Re: Zeilenumbruch entfernen bei Text Export

17. Februar 2021 10:49

Hallo,

lass dir doch den Feldinhalt mal Zeichenweise als integer ausgeben.

Gruß Fiddi

Re: Zeilenumbruch entfernen bei Text Export

17. Februar 2021 11:14

Hallo Fidii,

stehe da gerade auf den Schlauch, wie meinst du als Integer ausgeben?
Zeichen nach Integer konvertieren?

Danke

PS:
Wahrscheinlich so :

Code:
FOR li := 1 TO STRLEN(pText) DO BEGIN
  lChar := pText[li];
  lAscii := lChar;
  MESSAGE('Character %1 Ascii Value %2',pText[li],lAscii);
END;

Re: Zeilenumbruch entfernen bei Text Export

17. Februar 2021 11:34

Hallo,

jetzt ungetesteter sinngemäßer Code
Code:
int i;
int ii;

for I:= 1 to length(FieldToClean)
begin
  ii := FieldToClean[i];
end;

Du solltest du dir jetzt "ii" im Debugger anschauen können, und damit die (ASCII!?)Codes, die in deinem Test stehen.

Gruß Fiddi

Re: Zeilenumbruch entfernen bei Text Export

17. Februar 2021 11:35

Code:
// TempInt = Integer
// FieldTextAsInt = Text[250]
FOR I := 1 TO STRLEN(MyField) DO BEGIN
  TempInt 
:= MyField[I];
  IF FieldTextAsInt <> '' THEN BEGIN
    FieldTextAsInt 
+= '-';
  END;
  FieldTextAsInt += FORMAT(TempInt);
END;
MESSAGE(FieldTextAsInt);

Re: Zeilenumbruch entfernen bei Text Export

17. Februar 2021 11:36

Oder So. :-D

Re: Zeilenumbruch entfernen bei Text Export

17. Februar 2021 12:05

Also Text to Integer okay ... da werden mir auch die Ascii 10 angezeigt (Line Feed)
Warum lässt es sich dann nicht ersetzen/löschen durch DELSTR oder auf andere Wege ?

Also baue ich mir den Text Zeichen für zeichen wieder zusammen ?

Code:
     
IF AsciiValue = 10 THEN
      NewDescription += '*'
     ELSE
     NewDescription += FORMAT(FieldToClean[li]);


Danke

Re: Zeilenumbruch entfernen bei Text Export

17. Februar 2021 12:14

Mach mal folgendes:

Code:
VAR
  CRLF: Text[2];
BEGIN
  CRLF :='  ';
  CRLF[1] := 13;
  CRLF[2] := 10;

  Newstring := DELCHR(StringToClean,'=',CRLF);
END;


Gruß Fiddi

Re: Zeilenumbruch entfernen bei Text Export

17. Februar 2021 13:33

fiddi hat geschrieben:
Code:
  CRLF :='  ';


Wozu ist das eigentlich? Zum instanziieren?

Ich denke, die Funktion von elTorito war schon richtig. Nur sind die Variablen wahrscheinlich nicht als CHAR deklariert.

Re: Zeilenumbruch entfernen bei Text Export

17. Februar 2021 13:47

Hallo,

das
Code:
CRLF :='  ';
ist je nach NAV-Version und Build nötig oder auch nicht. :roll:

Aber es tut genau das was du sagst. Es belegt die Textvariable mit der gewünschten Länge vor, damit ich es hinterher überschreiben kann.
In einigen Builds führt das Schreiben des Zeichens auf einen Index nicht dazu, das die Textlänge angepasst wird. Daher die vorherige Zuweisung.

Gruß Fiddi

Re: Zeilenumbruch entfernen bei Text Export

17. Februar 2021 15:02

Vielen Dank für eure Antworten.

Beide Funktionen funktiionieren und entfernen den lästigen Zeilenumbruch. :-)

Re: [Gelöst] Zeilenumbruch entfernen bei Text Export

17. Februar 2021 15:40

Und um auch für die Zukunft zu verhindern, dass sich nicht druckbare Zeichen einschleichen, kannst du mit zwei kleinen Anpassungen in der Codeunit 1 dafür sorgen, dass CR, LF, Tab & Co. direkt gelöscht werden:
(Code-Basis: NAV 5.0 SP1 - funktioniert aber sinngemäß mit jeder NAV-Version, die noch die Codeunit 1 enthält.)

Code:
MakeText(VAR Text : Text[250]) : Integer
// >> TT3138
Text := RemoveHiddenChars(Text);
// << TT3138

Position := 1;
Length := STRLEN(Text);
ReadCharacter(' ',Text,Position,Length);
IF NOT ReadSymbol('?',Text,Position,Length) THEN
  EXIT
(0);
PartOfText := COPYSTR(Text,Position);
IF PartOfText = '' THEN BEGIN
  IF FORM
.RUNMODAL(0,StdTxt) = ACTION::LookupOK THEN
    Text 
:= StdTxt.Description;
  EXIT(0);
END;
StdTxt.Code := COPYSTR(Text,Position,MAXSTRLEN(StdTxt.Code));
IF NOT StdTxt.FIND('=>') OR
   
(UPPERCASE(PartOfText) <> COPYSTR(StdTxt.Code,1,STRLEN(PartOfText)))
THEN
  EXIT
(Position);
Text := StdTxt.Description;
EXIT(
0);

Code:
MakeCode(VAR Text : Text[250]) : Integer
// >> TT3138
Text := RemoveHiddenChars(Text);

EXIT(
0);
// << TT3138    

Code:
RemoveHiddenChars(OriginalText : Text[250]) : Text[250]
// >> TT3138
ReplacementChars[1] := 9;  // HT (Tab)
ReplacementChars[2] := 11; // VT (Tab)

ForbiddenChars[1] := 10; // LF (LineFeed)
ForbiddenChars[2] := 12; // FF (FormFeed)
ForbiddenChars[3] := 13; // CR (CarriageReturn)

OriginalText := CONVERTSTR(OriginalText,ReplacementChars,'  ');
EXIT(
DELCHR(OriginalText,'=',ForbiddenChars));
// << TT3138    

Diese Funktion tauscht Tabulatoren durch Leerzeichen aus und löscht CR, LF und FF ersatzlos.

Siehe auch:
Codeunit 1 Sammlung Funktions IDs