php string kezelés - megoldva

Üdv mindenkinek!

 

Szeretnék megoldani egy problémát, de nem igazán megy egyszerűen.

Switch uptime-ot szeretnék kiírni, ami alap esetben így néz ki:

"Timeticks: (2514932212) 291 days, 1:55:22.12"

 

Gondoltam rá, hogy levágom az utolsó 20 karakter előtti részt, de ez nem lesz megfelelő, mert változik a karakterlánc hossza.
Ez lett volna az ominózus megoldás: $uptime = substr($uptime, -20, strpos($uptime, ') '));

Egyszerűbbnek gondoltam aztán a  ')' előtti rész törlését, de valahogy úgy kellene kiírni az eredményt, hogy zárójel nélkül. Csak szóközre nem kereshetek, a karakterszám pedig szintén kiesik, mert a Timetick-ek növekedek.
Ez lett volna az a kódsor: $uptime = strstr($uptime, ') ');

 

Valakinek bármi jobb ötlet?

Hozzászólások

Bontsd fel szóközök alapján és utána azt kezeld tovább.

Alapvetően 3 lehetséges utat látok:

- preg_match / preg_split

- state machine alapú string bejárás for ciklussal.

- explode

Ha fontos a feldolgozási idő akkor a három közül a leggyorsabbat kell választani.

Szerkesztve: 2020. 03. 02., h - 13:32
$uptime = substr($timestamp, strpos($timestamp,') ')+2);

Az elmélet az, amikor mindent ismerünk, de semmi nem működik. A gyakorlat az, amikor minden működik, de senki nem tudja, miért.

amugy fura, mert a timeticks alapjan egy tizedessel el lehet valami csuszva:

$ echo 2514932212/86400/1000 | bc -l
29.10801171296296296296

gyartotol fuggetlenul, az snmpkepes eszkozok az alap snmp mibeket szoktak implementalni. peldaul ilyen az SNMPv2-MIB, amiben van a sysuptime.

mivel senki sem szeretne feltalalni a ujra kereket, a tuzet. 

tehat ha van masik snmp kepes eszkozod az is pont timetickset fog visszaadni sysuptime-re.

Szerkesztve: 2020. 03. 02., h - 16:17

honnan jon ez a furcsa string? switchekben van snmp, abban szokott lenni numerikus uptime

 

persze kaktusszal is lehet rejszolni, csak nem annyira elvezetes :)

A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!