einzelne CHAR aus String lesen in ST

geht das auch ohne den LIB´s?

Kann Deine Steuerung mit Pointern umgehen (also z.B. CoDeSys basierend?)

Ich kann Dir in Anlehnung an Dein Beispiel aus dem ersten Beitrag mal eine Beispiellösung mit Pointern posten.

Eins vorne Weg ich würde es mit der Standard.lib lösen und bin nicht von der folgenden überzeugt. Es geht mir lediglich darum aufzuzeigen wie es mit Pointern funktionieren könnte:

Code:
PROGRAM PLC_PRG
VAR
    myString1 : STRING := '123456789';
    myString2 : STRING := '123456789';

    myByteArray1 : ARRAY[0..255] OF BYTE;
    myByteArray2 : ARRAY[0..255] OF BYTE;

    ptString    : POINTER TO STRING;
    ptByteArray : POINTER TO ARRAY[0..255] OF BYTE;

    x : INT := 3;
    y : INT := 4;

END_VAR

Code:
(* String 1 in Bytearray umwandeln *)
ptString := ADR(myString1);
ptByteArray := ptString;
myByteArray1 := ptByteArray^;

(* String 2 in Bytearray umwandeln *)
ptString := ADR(myString2);
ptByteArray := ptString;
myByteArray2 := ptByteArray^;


(* Einzellnes Zeichen Umkopieren *)
myByteArray1[x] := myByteArray2[y];


(* Bytearray wieder in den String zurück wandeln *)
ptByteArray := ADR(myByteArray1);
ptString := ptByteArray;
myString1 := ptString^;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

zu dem Beispiel von Zotos hab ich eine Anmerkung:
In CoDeSys (V3) erzeugt die Deklaration
Code:
VAR
   myString1:STRING;
END_VAR
einen String mit einer Länge von 80 Zeichen.
Richtig für Zotos Beispiel wäre dem zu Folge
Code:
VAR
   myString:STRING(255);
   ptString:POINTER TO STRING(255);
END_VAR

Zu deiner Frage:
Hallo, wie kann man in ST einzelne Zeichen aus einem STring bearbeiten.
würde ich dir schon zu den Standard STRING Funktionen raten, aber auch mit Pointern kann man das sehr elegant lösen. Dann aber vorzugsweise mit zwei Pointern, welche jeweils auf ein Byte (Char) zeigen. z.Bsp.:
Code:
VAR
   myString1:STRING:='Hello';
   myString2:STRING:='a';
   ptby1,ptby2:POINTER TO BYTE;
END_VAR
Code:
ptby1:=ADR(myString1); (*Pointer zeigt auf den 1. character von myString1*)
ptby2:=ADR(myString2); (*Pointer zeigt auf den 1. character von myString2*)
ptby1[1]:=ptby2[0];(*in myString1 steht jetzt 'Hallo'*)
Das gilt aber nur für CoDeSys V3, bei V2.3 musst du den Pointer erst hoch zählen und dann immer mit ptby1^ auflösen.
 
Jetzt noch mal das ganze in kurz:

Code:
VAR
    myString1 : STRING := '123456789';
    myString2 : STRING := '123456789';

    ptrByteArray1 : POINTER TO ARRAY[0..79] OF BYTE;
    ptrByteArray2 : POINTER TO ARRAY[0..79] OF BYTE;

    x : INT := 3;
    y : INT := 4;

END_VAR

Code:
(* Pointer laden *)
ptrByteArray1 := ADR(myString1);
ptrByteArray2 := ADR(myString2);


(* Einzellnes Zeichen Umkopieren *)
ptrByteArray1^[x] := ptrByteArray2^[y];
 
Zurück
Oben