Step 7 Char in einen String oder als Int

bluebird277

Level-1
Beiträge
100
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

habe eine vorgegebene Struktur in einem DB.

Möchte 4 Char Werte zu einem String zusammensetzen. Oder Besser noch als Int Ausgeben. Ich denke wenn ich die Char als String habe kann ich den String mit dem FC 38 umwandeln richtig?

Könnt Ihr mir bitte einen Tipp geben.

Danke
 

Anhänge

  • ima1.jpg
    ima1.jpg
    121,7 KB · Aufrufe: 58
Mit SCL könnte man das so machen:

Code:
tmpString:= ' ';

FOR i:= 1 TO "n" DO
            tmpString:=REPLACE(IN1 := tmpString, IN2 := DATEN[i],L := 1,P := i);
        END_FOR;

n = Anzahl der CHAR-Variablen
 
Du kannst auch direkt in INT umwandeln.
Sie Zahlen in ASCII sind 30hex (0) bis 39hex (9)

Dann kannst du folgendermaßen vorgehen in AWL:
Code:
//My_Int als Int in Temp deklarieren

//1000-er
L DB10.Daten[1]    //Daten laden
L w#16#30   //30hex
-I                 //subtrahieren
L 1000          //1.Stelle (1000-er)
*I
T #My_Int

//100-er
L DB10.Daten[2]    //Daten laden
L w#16#30   //30hex
-I                 //subtrahieren
L 100           //2.Stelle (100-er)
*I
L #My_Int 
+I
T #My_Int

//10-er
L DB10.Daten[3]    //Daten laden
L w#16#30   //30hex
-I                 //subtrahieren
L 10             //3.Stelle (10-er)
*I
L #My_Int 
+I
T #My_Int

//1-er
L DB10.Daten[4]    //Daten laden
L w#16#30   //30hex
-I                 //subtrahieren
L #My_Int 
+I
T #My_Int

Wenn du nicht sicher bist, ob in den Char auch wirklich Ziffern liegen, dann mußt du natürlich vorher jeden Char darauf prüfen, ob er zwischen 30hex und 39hex liegt, sonst würde es natürlich Ärger geben.
 
Hallo Ralle,

super Vielen Dank werde es mal ausprobieren.

Habe heute Mittag mal auf die schnelle was in SCL gebastelt. Vielleicht habt Ihr ja noch Verbesserungsvorschläge. Wobei ich eher zu AWL tendiere.

CASE iSchritt OF
0:

ischritt:=10;


10:

iString1:=CHAR_TO_STRING(char1);
iString2:=CHAR_TO_STRING(char2);
iString3:=CHAR_TO_STRING(char3);
iString4:=CHAR_TO_STRING(char4);
iString5:=CHAR_TO_STRING(char5);
iString6:=CHAR_TO_STRING(char6);

ischritt:=20;

20:

StringGesamt:=CONCAT(IN1:=iString1, IN2:=iString2);
StringGesamt:=CONCAT(IN1:=StringGesamt, IN2:=iString3);

IF db10.dbw2=4 THEN
StringGesamt:=CONCAT(IN1:=StringGesamt, IN2:=iString4);
ischritt:=30;
ELSE
ischritt:=30;
END_IF;

30:

Integer:=STRING_TO_INT(StringGesamt);

ischritt:=100;

100:

ischritt:=0;

ELSE:
// Anweisungen_ELSE
;
END_CASE;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo bluebird.

Grundsätzlich finde ich es immer gut, alle Möglichkeiten abzuwägen und dabei auch eigene Ideen zu probieren. Lernen wird man auf diese Weise immer.
Allerdings ist das extrem "zu Fuß" was Du gemacht hast.
Die Stringvariablen müssten aber irgendwo noch initialisiert werden. Außerdem ist es nicht besonders sinnvoll, jede CHAR-Variable einzeln auf eine STRING-Variable zu rangieren.
Der absolute Zugriff auf DB10.DBW2 ist auch nicht so schön. Versuch Dir anzugewöhnen symbolisch zu programmieren.
Ansonsten sieht es so aus, als würde der Code so auch zum Ziel führen.
Allerdings ist der Code viel umfangreicher als der, den ich in meinem post #4 gezeigt habe. Zumal man damit bei einer größeren Zahl von CHAR auch noch arbeiten kann. "Zu Fuß" wird man ab einer gewissen Anzahl schnell ein Sklave der Tasten...
 
Zurück
Oben