Code:
fbFilePuts( sNetId := sNetId, hFile := hFile, pWriteBuff := ADR(sCSVField_array),cbWriteLen :=[COLOR="#FF0000"]SIZEOF[/COLOR](sCSVField_array), bExecute := TRUE );
Code:
fbWriter(pBuffer := ADR(sCSVField_Array), cbBuffer := [COLOR="#FF0000"]SIZEOF[/COLOR](sCSVField_Array), putValue := sCSVField '', pValue := 0, cbValue := 0 ,
Du hast einen Puffer sCSVField_array mit 1000 Bytes deklariert und danach (hoffentlich) Deine Strings
lückenlos hintereinander in das Byte-Array kopiert. Dabei wird der Byte-Puffer allerhöchstwahrscheinlich nicht voll belegt, sondern es bleiben unbeschriebene Bytes am Ende übrig. Danach schreibst Du (mit fbWriter oder fbFilePuts oder beiden
) das komplette Array inklusive der nicht belegten Bytes am Ende in die Datei.
Du solltest nur den tatsächlich von Nutzdaten/Strings belegten Teil des Arrays in die Datei schreiben. Dazu musst Du Dir beim Zusammenbasteln merken wie lang der Gesamtstring ist, oder nachträglich die Gesamtlänge ermitteln (
z.B. so), und bei fbWriter/fbFilePuts anstatt der gesamten Puffergröße
cbBuffer := SIZEOF(sCSVField_Array) nur die tatsächliche Länge angeben.
Irgendwie finde ich in Deinem gezeigten Code nicht, wo Du in das Array sCSVField_Array schreibst und wie Du den laaangen String zusammenbastelst ...
Ein Byte mit dem Inhalt 0 ist nicht leer, sondern es steht der Wert 0 drin. Daß diese 0 für Dich wie ein Leerzeichen aussieht liegt an dem Programm, was Dir die 0 als Leerzeichen präsentiert.
Code:
sCSVField_array := [COLOR="#FF0000"]null; (* sCSVField_array "Löschen"*)[/COLOR]
Ich kenne Twincat nicht, doch ich vermute, auch dies tut nicht das was Du erwartest - ich glaube nicht daß dabei alle Bytes in dem Array auf 0 initialisiert/gelöscht werden. Ich hätte sogar erwartet, daß der ST-Compiler diese Anweisung anmeckert ("null" sollte nur an Pointer zugewiesen werden können) ...
Harald