# Array of Char in String umwandeln in SCL



## Gnaldariel (1 September 2015)

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


----------



## PN/DP (1 September 2015)

Gnaldariel schrieb:


> 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


----------



## Lord_Anubis (1 September 2015)

Gnaldariel schrieb:


> 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.


----------



## Gnaldariel (1 September 2015)

PN/DP schrieb:


> 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
> ...



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.


----------



## Lord_Anubis (1 September 2015)

Wenn du ihn vorher nicht initialisierst, woher bekommt der String dann seine Länge (zweites Byte)?


----------



## Gnaldariel (1 September 2015)

Es ist einfach nur eine als String unter Static deklarierte Variable im dazugehörigen DB


----------



## Lord_Anubis (2 September 2015)

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?


----------



## Gnaldariel (2 September 2015)

Ja, habe ich.


----------

