Wir basteln einen String und füllen Lücken

Bernd87

Level-2
Beiträge
45
Reaktionspunkte
0
Hallo,

ich will einen Dateinamen mit Datum und Uhrzeit erstellen jetzt fehlt mir der letzte Schritt.
Eine DB mit allen benötigten Teilen habe ich befüllt mit Komponenten des "RD_SYS_T".
Die Länge habe ich begrenzt mit bsp. Jahr String[4]; Montant String[2] usw.
Verknüpft habe ich alles mit CONCAT zu: "2021 9 3 820"
Jetzt habe ich den Status 8090 was soviel heißt wie "unzulässiger Dateiname"
Die Leerzeichen sollten die Schuldigen sein. Denk ich!

Wie zur HÖLLE bekomme ich die Leerzeichen mit Nullen aufgefüllt?
Ich hab absolut keinen Einfall und Google ist momentan nicht mein Freund!
Danke im Voraus!
 
Moin Bernd,

entweder prüfst Du die Zahl vor der Wandlung in String auf <10 und fügst eine Null in den String davor.
Oder Du prüfst den String auf Länge = 1 bzw. das erste Zeichen auf Zeichen 32 (Leerzeichen) und hängst dann eine Null davor.

Du kannst natürlich auch per Schleife durch alle Zeichen des fertigen Strings gehen und alle "32"er-Zeichen durch Nullen ersetzen.

Gruß
Jens
 
Achtung, anstatt den Leerzeichen kein Null-Zeichen (16#00) sondern das Zeichen '0' (16#30).
Wenn schon Leerzeichen ' ' (16#20) (angeblich?) unzulässig sind, dann dürften Null-Zeichen erst recht unzulässig sein.

In welchem Programmiersystem bekommst Du bei welcher Anweisung den Fehlerstatus 8090?

Harald
 
Wie entstehen bei Dir die hier als Leerzeichen gezeigten Zeichen?
Vermutlich bei der Wandlung von INT(?) in STRING. Die "vorflaufenden Nullen" werden dann üblicherweise durch Blanks ersetzt.

Um die (alle!) Blanks in einem String, der ansonsten nur Ziffern enthält, in '0' zurückzuwandeln:
zu allen Bytes (ASCII-Zeichen) 16#10 dazuODERn.
Abzufragen, ob ein Byte ' ' enthält und nur in diesem Fall '0' reinzuschreiben, ist dann nicht nötig.
 
Zuletzt bearbeitet:
Vermutlich bei der Wandlung von INT(?) in STRING. Die "vorflaufenden Nullen" werden dann üblicherweise durch Blanks ersetzt.
Das muß ja wieder eine Siemens-Spezialität sein...
Entweder erwarte ich im ersten Zeichen ein Vorzeichen oder aber die Zahl, aber warum soll da bitte schön ein Leerzeichen auftauchen, wenn ich eine Zahl konvertiere? Vor allem: Wer entscheidet denn, wie viele führenden Nullen ich haben soll?

@Bernd87: Was ich in Deinem Bild sehe: Das Format der Zahl ist ein USInt, Du konvertierst aber einen UInt. Möglicherweise kann das die Funktion verwirren.
 
Das muß ja wieder eine Siemens-Spezialität sein...
Entweder erwarte ich im ersten Zeichen ein Vorzeichen oder aber die Zahl, aber warum soll da bitte schön ein Leerzeichen auftauchen, wenn ich eine Zahl konvertiere? Vor allem: Wer entscheidet denn, wie viele führenden Nullen ich haben soll?

@Bernd87: Was ich in Deinem Bild sehe: Das Format der Zahl ist ein USInt, Du konvertierst aber einen UInt. Möglicherweise kann das die Funktion verwirren.
Das ist bei der Siemens-Funktion so. Wenn du führende Nullen haben möchtest, musst du die Leerzeichen nachträglich ersetzen oder eine eigene Wandlungsfunktion schreiben.

Zitat aus der Hilfe:
  • Bei der Konvertierung eines numerischen Werts in eine Zeichenkette werden die ersten Zeichen der Zeichenkette mit Leerzeichen aufgefüllt. Die Anzahl der Leerzeichen ist abhängig von der Länge des numerischen Werts.
 
Das Format der Zahl ist ein USInt, Du konvertierst aber einen UInt. Möglicherweise kann das die Funktion verwirren.
Das stimmt! Ich hätte jetzt aber eigentlich erwartet das mich SIEMENS bezüglich diese Fauxpas ermahnt!!!
Das Probiere ich...am Montag! Schönen WE
 
Das stimmt! Ich hätte jetzt aber eigentlich erwartet das mich SIEMENS bezüglich diese Fauxpas ermahnt!!!
Das Probiere ich...am Montag! Schönen WE
Du siehst an den Bausteinen, wo das der Fall ist, vorne ein kleines Quadrat. Das gibt den Hinweis das die Datentypen nicht übereinstimmen aber intern Konvertiert werden. Die Leerzeichen wirst du aber in jedem Fall haben (siehe mein vorheriger Beitrag).
 
Wir wissen (noch) nicht, ob es die Leerzeichen sind, die bemeckert werden.
Irgendwo gab es doch mal die Regel, dass Namen mit einem Buchstaben (oder Unterstrich) beginnen müssen ...

... oder eine eigene Wandlungsfunktion schreiben.
... oder eine eigene ReplaceFunktion schreiben, die wie "Replace" in VBA oder 'Wechseln" (Excel, ArbeitsBlattFunktion) alle Vorkommnisse eines Zeichens/Strings durch ein anderes Zeichen bzw. einen anderen String ersetzt.
 
Zuletzt bearbeitet:
Das ist bei der Siemens-Funktion so. Wenn du führende Nullen haben möchtest, musst du die Leerzeichen nachträglich ersetzen oder eine eigene Wandlungsfunktion schreiben.

Zitat aus der Hilfe:
Das Zitat aus der Hilfe verstehe ich nicht... :unsure:
Die Anzahl der Leerzeichen ist abhängig von der Länge des numerischen Werts.

Wenn ich "9" in einen String wandel, ist mein numerischer Wert 1 Zeichen lang... wo sollen da Leerzeichen her kommen?
Oder meinen die die Länge des Datentyps? Dann würde ich aber zwei Leerzeichen erwarten, da USInt einen Wertebereich von 0..255 hat.

Ich verstehe auch nicht, warum eine Wandlung "0" einen String mit der Länge 6 erzeugt, auch das steht in der Hilfe...
 
Das Zitat aus der Hilfe verstehe ich nicht... :unsure:


Wenn ich "9" in einen String wandel, ist mein numerischer Wert 1 Zeichen lang... wo sollen da Leerzeichen her kommen?
Oder meinen die die Länge des Datentyps? Dann würde ich aber zwei Leerzeichen erwarten, da USInt einen Wertebereich von 0..255 hat.

Ich verstehe auch nicht, warum eine Wandlung "0" einen String mit der Länge 6 erzeugt, auch das steht in der Hilfe...
Es geht über den Datentyp. Die Länge 6 ist bei Int, da ist der Wertebereich -32768 .. 32767 also werden 6 Zeichen benötigt um den kleinsten Wert inkl. Vorzeichen darzustellen. Das hier nur ein Leerzeichen ist, liegt daran, dass er den String nur als STRING[2] deklariert hat.
 
Es geht über den Datentyp. Die Länge 6 ist bei Int, da ist der Wertebereich -32768 .. 32767 also werden 6 Zeichen benötigt um den kleinsten Wert inkl. Vorzeichen darzustellen. Das hier nur ein Leerzeichen ist, liegt daran, dass er den String nur als STRING[2] deklariert hat.
Wer lesen kann, ist klar im Vorteil :) Danke!
Wieder typisch S...
 
Zurück
Oben