Options

File.Write with many Data - "Stackspeicherfehler"

CitysoundsCitysounds Member Posts: 6
Hello,

simple problem: I want to write many variables into a textfile. When I run the following Code, I get an "Stackspeicherfehler". It seems, that Navision can handle so many added strings.

How can I solve this Problem? I've tried with STRSUBSTO and with BigText, but without success.
ExportDatei.WRITE('"' + FORMAT(ArtikelID) +
  '"' + Feldtrennzeichen + '"' + Zeichenkonvertierung.CharToAnsi(Artikelnr) +
  '"' + Feldtrennzeichen + '"' + Zeichenkonvertierung.CharToAnsi(ArtName) +
  '"' + Feldtrennzeichen + '"' + Zeichenkonvertierung.CharToAnsi(KurzBeschr) +
  '"' + Feldtrennzeichen + '"' + Zeichenkonvertierung.CharToAnsi(LangBeschr[1]) +
  Zeichenkonvertierung.CharToAnsi(LangBeschr[2]) + 
  Zeichenkonvertierung.CharToAnsi(LangBeschr[3]) +
  Zeichenkonvertierung.CharToAnsi(LangBeschr[4]) + 
  Zeichenkonvertierung.CharToAnsi(LangBeschr[5]) +
  Zeichenkonvertierung.CharToAnsi(LangBeschr[6]) + 
  Zeichenkonvertierung.CharToAnsi(LangBeschr[7]) +
  Zeichenkonvertierung.CharToAnsi(LangBeschr[8]) + 
  Zeichenkonvertierung.CharToAnsi(LangBeschr[9]) +
  Zeichenkonvertierung.CharToAnsi(LangBeschr[10]) +
  Zeichenkonvertierung.CharToAnsi(LangBeschr[11]) +
  Zeichenkonvertierung.CharToAnsi(LangBeschr[12]) + 
  Zeichenkonvertierung.CharToAnsi(LangBeschr[13]) +
  Zeichenkonvertierung.CharToAnsi(LangBeschr[14]) +
  Zeichenkonvertierung.CharToAnsi(LangBeschr[15]) +
  Zeichenkonvertierung.CharToAnsi(LangBeschr[16]) +
  Zeichenkonvertierung.CharToAnsi(LangBeschr[17]) +
  Zeichenkonvertierung.CharToAnsi(LangBeschr[18]) +
  Zeichenkonvertierung.CharToAnsi(LangBeschr[19]) +
  Zeichenkonvertierung.CharToAnsi(LangBeschr[20]) +
  '"' + Feldtrennzeichen + '"' + Zeichenkonvertierung.CharToAnsi(Verfuegbarkeit) +
  '"' + Feldtrennzeichen + '"' + FORMAT(Aktiv) +
  '"' + Feldtrennzeichen + '"' + Zeichenkonvertierung.CharToAnsi(Steuernummer) +
  '"' + Feldtrennzeichen + '"' + FORMAT(Artikelpreis,0,'<Standard Format,1>') +
  '"' + Feldtrennzeichen + '"' + FORMAT(BruttoNetto) +
  '"' + Feldtrennzeichen + '"' + FORMAT(HaendlerpreisNetto,0,'<Standard Format,1>') +
  '"' + Feldtrennzeichen + '"' + FORMAT(UVP,0,'<Standard Format,1>') +
  '"' + Feldtrennzeichen + '"' + FORMAT(PreisAufAnfrage) +
  '"' + Feldtrennzeichen + '"' + FORMAT(Finanzierbar) +
  '"' + Feldtrennzeichen + '"' + FORMAT(Aktionspreis) +
  '"' + Feldtrennzeichen + '"' + FORMAT(AktionspreisEndkunde,0,'<Standard Format,1>') +
  '"' + Feldtrennzeichen + '"' + FORMAT(AktionspreisHaendler,0,'<Standard Format,1>') +
  '"' + Feldtrennzeichen + '"' + FORMAT(AktionStart) +
  '"' + Feldtrennzeichen + '"' + FORMAT(AktionEnde) +
  '"' + Feldtrennzeichen + '"' + Zeichenkonvertierung.CharToAnsi(Laenderrestriktionen) +
  '"' + Feldtrennzeichen + '"' + FORMAT(StartseitenHotSpot) +
  '"' + Feldtrennzeichen + '"' + FORMAT(VerzeichnisHotSpot) +
  '"' + Feldtrennzeichen + '"' + FORMAT(GeschenkMinimalerWarenwert,0,'<Standard Format,1>') +
  '"' + Feldtrennzeichen + '"' + FORMAT(GeschenkMaximalerWarenwert,0,'<Standard Format,1>') +
  '"' + Feldtrennzeichen + '"' + Zeichenkonvertierung.CharToAnsi(VerzeichnisIDs) +
  '"' + Feldtrennzeichen + '"' + Zeichenkonvertierung.CharToAnsi(Liefereinschraenkungen) +
  '"' + Feldtrennzeichen + '"' + Zeichenkonvertierung.CharToAnsi(Zubehoer) +
  '"' + Feldtrennzeichen + '"' + Zeichenkonvertierung.CharToAnsi(Artikeloptionen) + '"');

This Code write my Items and some additional Informations into one Textrow. The File will be uploaded to an Webshop.

Thank you
Andy

Comments

  • Options
    KowaKowa Member Posts: 918
    Set Textmode to FALSE for the file and write the fields separately, then add a CR ( Carriage Return, use a Char variable (=13)) at the end of each line.
    Kai Kowalewski
  • Options
    CitysoundsCitysounds Member Posts: 6
    Thank you - I'll try this.
  • Options
    CitysoundsCitysounds Member Posts: 6
    Oh, I remembering why I dont use Testmode = False... It writes an Binary-File :? The Webshop don't like that.
  • Options
    KowaKowa Member Posts: 918
    It will turn out to be a normal textfile, if you do it like this :

    The ASCII value of each character needs to written separately, if TEXTMODE is set to FALSE.
    This is an Example for Separator ";" ( ASCII Code : 59)
    Create a function WriteIntoFile with parameters "Field" (Text) and "IsLastField" ( Boolean)

    WriteIntoFile(Field : Text[250];IsLastField : Boolean)
    CR := 13 // use char variables
    LF := 10
    Separator := 59;

    Length := STRLEN(Field);
    FOR I := 1 TO Length DO BEGIN
    Z := Field;
    MyFile.WRITE(Z);
    END;
    IF IsLastField THEN BEGIN
    MyFile.WRITE(Separator);
    MyFile.WRITE(CR); // Carriage Return
    MyFile.WRITE(LF); // Line Feed
    END ELSE
    MyFilei.WRITE(Separator);

    If the FieldDelimiter-Quotes " ( char /ASCII : 34 ) are necessary, these have to be written before and after the field in this function
    Kai Kowalewski
  • Options
    KowaKowa Member Posts: 918
    The method above will always work, but will be a little bit slower than the normal export.
    You could also try to build up the string before writing it to avoid the stack error, use TEXTMODE(TRUE) in this case.
    ExportString := FieldDelimiter + Field1 + FieldDelimiter + FieldSeparator;
    ExportString := ExportString + FieldDelimiter + Field2 + FieldDelimiter + FieldSeparator;
    ExportString := ExportString + FieldDelimiter + Field3 + FieldDelimiter + FieldSeparator;
    .... etc. ( no FieldSeparator for the last field)
    MyFile.Write(ExportString);
    Kai Kowalewski
Sign In or Register to comment.