Zahl aus String extrahieren

wackel_peter

Level-1
Beiträge
54
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin, moin.

Ich steh gerade vor dem Problem, dass ich einen String habe der am mit einer Zahl anfängt.
Nun möchte ich die Zahl für die weiter Auswertung nutzen.
Wie komme ich an die Zahl? Bzw geht das ohne den String auf Bytebene auswerten zu müssen?

Kurz zum verdeutlichen:
strMuster := "12Abc3456df"
Mittels MID(strMuster, 2,1 ) habe ich nun "12" als String vorliegen und würde nun gerne daraus
ein Integer zaubern.

Grüße Peter

PS: Ich nutze Codesys 2.3
 
Code:
Integer := STRING_TO_INT(String);

Wenn der String einen Integerwert darstellt, wird dieser umgewandelt. Ist der String kein gültiger Integerwert, dann kommt 0 bei der Umwandlung raus.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich konnte jetzt die Funktion STRING_TO_DINT einbinden.

Code:
(*Variablen*)
Input: STRING(40);
strj: STRING;
pj : POINTER TO BYTE;
dnj: DINT;
j: INT;

(*Programm*)
strj:= MID(Input, 2,1);
pj := ADR(strj);
dnj :=  STRING_TO_DINT(pj);
j   := DINT_TO_INT(dnj);

Leider liefert bereits STRING_TO_DINT nur 0
 
Du musst STRING_TO_DINT dann auch einen String als Eingangswert mitgeben und keinen Pointer .....

Code:
(*Variablen*) 
Input: STRING(40); 
strj: STRING; 
dnj: DINT; 
j: INT;  
(*Programm*) 
strj:= MID(Input, 2,1); 
dnj :=  STRING_TO_DINT(strj);
 j   := DINT_TO_INT(dnj);
 
Zuletzt bearbeitet:
Leider nicht. Der Baustein verlangt Adresse auf String.

Code:
FUNCTION STRING_TO_DINT : DINT
VAR_INPUT
    psz1  :  DWORD;    (* Stringadresse *)
END_VAR
VAR
END_VAR

Ach ja, hatte ich oben im Code vergessen, pj als Pointer to DWORD oder String verändert leider auch nichts.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Na dann deklariere pj mal als Pointer To String. Evtl. musst du noch die Länge des Strings angeben.
Code:
pj : POINTER TO STRING;
oder
pj : POINTER TO STRING(2);
 
Zuletzt bearbeitet:
Hallo,

versuchs mal so, bei mir Funktioniert es so:

(*Variablen*)
Input: STRING := '12Abc3456df';
strj: STRING;
pj : POINTER TO STRING;
dnj: INT;

(*Programm*)
strj:= MID(Input, 2,1);
pj := ADR(strj);
dnj := STRING_TO_INT(pj^);

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

versuchs mal so, bei mir Funktioniert es so:

(*Variablen*)
Input: STRING := '12Abc3456df';
strj: STRING;
pj : POINTER TO STRING;
dnj: INT;

(*Programm*)
strj:= MID(Input, 2,1);
pj := ADR(strj);
dnj := STRING_TO_INT(pj^);

Gruß

wackel_peters String_To_Dint Funktion braucht die Speicheradresse vom String.
pj^ ist der Inhalt des Pointers. Dann kannst du statt dessen auch gleich STRING_TO_INT(strj) schreiben.

Wie gesagt, normalerweise kann Codesys 2.3 alle gängigen Konvertierungen. Aber dieses Grips_cp scheint wohl nur eine abgespeckte Version zu enthalten, weswegen STRING_TO_INT dort wohl nicht klappt.....
 
Zurück
Oben