Wert aus Stringvariable

Hallo Gemeinde,

ich versuche seit 2 Tagen erfolglos einen Wert aus einer Stringvariable in eine Floatvariable zu schreiben.

Das problem ist, daß manchmal der Wert in der Stringvariablen positiv ist, und manchmal negativ.
Das ist auch richtig so, nur macht es mir das als Anfänger nicht leichter :slight_smile:

Ziel ist es quasi eine Stringvariable zu lesen :

<format…haste nich gesehen…farbe und fett …50.27kWh>

Jetzt würde ich gerne 50.27 in eine Float Variable schreiben.

Manchmal kommt aber auch ein negativer Wert :

<format…haste nich gesehen…farbe und fett …-12.36kWh>

In dem Fall würde ich gerne -12.36 in die gleiche Float Variable schreiben.

Hier mein Lösungsansatz, der aber zu 90% kopiert ist :frowning:

$string = $teile[17];
preg_match('/([-+][0-9.]+)/', $string, $matches);

$kw_gesamt = (float)$matches[0];
print ($kw_gesamt);
print " kWh
";

Gibt es hier etwas einfacheres, als ich das hier gerade zusammenstümpere ?
Zudem es nicht bei positiv Werten funktioniert .

Vielen Dank für die Hilfe
LG
Sascha

Falls der String von einer Webseite kommt ist der Textparser der beste Weg.
Sonst wenn der Anfang des Strings immer Gleich ist würde ich es über „substr“ machen.

Hallo Thomas,

danke für deine Antwort.

Nein, es ist keine Webseite.
Was vor dem Wert steht, kann sich immer ändern, auch die länge des Werts, also ob 2,3 oder noch mehr Stellen.
Und eben einmal positiv ohne, und aber auch negativ mit vorzeichen.

Daher bin ich gerade etwas ratlos.

LG
Sascha

Edit: Eventuell habe ich substr auch noch überhaupt nicht verstanden, und damit geht alles…aber wie in meinem Fall ? :slight_smile:

Ich meinte den String vor der Zahl bzw. dem Vorzeichen, ist der immer gleich lang?

nein, leider nicht…da wird die Farbe definiert…und wenn ich mal das layout ändere, dann wird aus „red“ gerne mal „yellow“ :frowning:

LG
Sascha

Der witz ist, ich habe 2 versionen, die laufen…

eine version für positiven Werte :

$string = $teile[14];
preg_match('/([0-9.]+)/', $string, $matches);

$kw_pv = (float)$matches[0];
print ($kw_pv." kWh
");

und eine für negative Werte :

$string = $teile[17];
preg_match('/([-+][0-9.]+)/', $string, $matches);

$kw_gesamt = (float)$matches[0];
print ($kw_gesamt." kWh
");

Das Problem ist, ich bräuchte eine version, die für positive UND negative Werte gleichzeitig funktioniert.

nur diese Parameter hier sind für mich Böhmische Dörfer :

preg_match('/([-+][0-9.]+)/', $string, $matches);

LG
Sascha

Ich bin auch PHP-User auf Seepferdchen Niveau aber hierfinden sich doch einige Beispiele, die das Problem erläutern und lösen.

Versuche es mal mit:

preg_match('/([-+]*[\d.]+)\s*kWh/i', $string, $matches);

Tommi

Danke,

das werde ich morgen mal probieren…allerdings kann sich auch der Suffix ändern :frowning:

Ich verfolge gerade einen anderen Lösungsansatz :

In der Stringvariablen ein „Markierung“ vor und hinter den Wert zu setzen.

Zum Beispiel <!----->45.62<!----->

So weiß ich immer, wo meine Zahl dazwischen ist…

LG
Sascha