Array of Char in String umwandeln in SCL

Gnaldariel

Level-1
Beiträge
14
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag liebes Forum,

Ich habe mein Problem bereits selbst gelöst. Aber für jeden der auf die Schnelle einen Array of Char in einen String umwandeln möchte hier an einem Beispiel von mir.

FOR #zeichen := 0 TO 25 DO
#MyString[#zeichen +1] := CHAR_TO_STRING(#MyArrayOfChar[#zeichen]);
END_FOR;

Der Array of Char ist auf eine größe von 25 Zeichen im DB festgelegt (Array of char [0..25] ). MyString ist ein String im DB . Die Variable zeichen ist ein Integer und weisst die gewünschte Stelle zum beschreiben im String und im Array zu

Dementsprechend könnt ihr einfach eure Variablennamen durch meine ersetzen und die passende Array Größe einstellen und es sollte funktionieren.

Mit freundlichen Grüßen,

Gnaldariel
 
Zuletzt bearbeitet:
FOR #zeichen := 0 TO 25 DO
#MyString[#zeichen +1] := CHAR_TO_STRING(#MyArrayOfChar[#zeichen]);
END_FOR;

Der Array of Char ist auf eine größe von 25 Zeichen im DB festgelegt (Array of char [0..25] ).
Ich kenne TIA nicht genug, doch das CHAR_TO_STRING(...) läßt mich vermuten, daß diese Umwandlung äußerst uneffektiv durchgeführt wird.

Ungenaue Schlampigkeiten:
- Array of char [0..25] ist 26 Zeichen
- der Code funktioniert vermutlich nur dann sauber, wenn MyString schon vorher auf 26 Zeichen Ist-Länge initialisiert ist

Für welche CPU soll der Code sein? Für S7-1200 und S7-1500 gibt es schon eine fertige Anweisung Chars_TO_Strg, da geht das ganze ohne Schleife.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
FOR #zeichen := 0 TO 25 DO
#MyString[#zeichen +1] := CHAR_TO_STRING(#MyArrayOfChar[#zeichen]);
END_FOR;

Hast du einen View auf den String gelegt oder kann man in TIA auf denen String mit Index ( #MyString[#zeichen + 1] ) zugreifen?

Warum denn #MyString[#zeichen +1]?? Falls du einen View (Datensicht) verwendet hast und dieser ein Array ist, müsste das dann nicht +2 heißen? Erstes Byte max. Länge, zweites Byte tatsächliche Länge.
 
Ich kenne TIA nicht genug, doch das CHAR_TO_STRING(...) läßt mich vermuten, daß diese Umwandlung äußerst uneffektiv durchgeführt wird.

Ungenaue Schlampigkeiten:
- Array of char [0..25] ist 26 Zeichen
- der Code funktioniert vermutlich nur dann sauber, wenn MyString schon vorher auf 26 Zeichen Ist-Länge initialisiert ist

Für welche CPU soll der Code sein? Für S7-1200 und S7-1500 gibt es schon eine fertige Anweisung Chars_TO_Strg, da geht das ganze ohne Schleife.

Harald

Das ist richtig, dieser Code geht nur solange die Größe von MyArrayOfChars vorher deklariert wurde. Und nein, durch das +1 bei MyString wird das richtige Zeichen aus dem Array der richtigen Stelle des Strings zu gewiesen und es ist nicht nötig iwas zu initialisieren an MyString. Ist auch nur eine kleine Lösung. Wie muss ich Chars_TO_strg mit meinen Variablen beschreiben ? Nutze aktuell eine S7-1500, aber möchte gerne den FB universell für verschiedene Zwecke nutzen. Es soll halt ein allgemeiner Speicher FB werden.
 
Zuletzt bearbeitet:
OK, aber die tatsächliche Länge musst du doch trotzdem angeben.
Hast du den String gleich mit einem entsprechenden Startwert versehen, damit die Länge passt?
 
Zurück
Oben