Sascha
15. September 2018 um 19:48
1
Hallo Gemeinde,
mal wieder was für zwischendurch
Ich versuche gerade mal meine Ausgaben etwas auf zu hübschen…
Was mache ich denn hier falsch, oder geht das überhaupt so, wie ich mir das vorstelle ?
$format = '%4d' . $format_jahr . '%4d' . $format_tag . '%2d' . $format_stunde . '%2d' . $format_minute;
$message = sprintf($format, $jahre, $tage, $stunden, $minuten);
SetValueString($output_uptime, $message);
In der Variable im Webfront werden alle Leerzeichen ignoriert, was ich aber nicht möchte.
Liebe Grüße
Sascha
paresy
18. September 2018 um 16:50
2
Da fehlen irgendwie Variablen. Magst du ein vollständiges Beispiel geben?
paresy
Sascha
19. September 2018 um 23:19
3
Entschuldige
Hatte auf deine Glaskugel gehofft
Hier mal der ganze code (noch nicht aufgehübscht, aber man erkennt hoffentlich die idee)
<?
$uptime_minute = GetValueInteger(29479 /*[Entwicklungsbereich Sascha\HTTP Commands Relais\Programm/Scripte\ESP Easy Single SAT\Uptime in Minuten]*/);
$rekord_minute = GetValueInteger(43582 /*[Entwicklungsbereich Sascha\HTTP Commands Relais\Programm/Scripte\ESP Easy Single SAT\Rekord Uptime]*/);
$output_uptime = 21705 /*[Entwicklungsbereich Sascha\HTTP Commands Relais\Programm/Scripte\ESP Easy Single SAT\Uptime String]*/;
$output_uptime_rekord = 20487 /*[Entwicklungsbereich Sascha\HTTP Commands Relais\Programm/Scripte\ESP Easy Single SAT\Rekord Uptime String]*/;
$message = "";
$format = "";
$jahre = 0;
$tage = 0;
$stunden = 0;
$minuten = 0;
if ($uptime_minute > $rekord_minute) {
SetValueInteger(43582 /*[Entwicklungsbereich Sascha\HTTP Commands Relais\Programm/Scripte\ESP Easy Single SAT\Rekord Uptime]*/, $uptime_minute);
}
$sekunden = GetValueInteger(29479 /*[Entwicklungsbereich Sascha\HTTP Commands Relais\Programm/Scripte\ESP Easy Single SAT\Uptime in Minuten]*/)*60;
$minuten = bcdiv($sekunden, '60', 0);
$sekunden = bcmod($sekunden, '60');
$stunden = bcdiv($minuten, '60', 0);
$minuten = bcmod($minuten, '60');
$tage = bcdiv($stunden, '24', 0);
$stunden = bcmod($stunden, '24');
$jahre = bcdiv($tage, '365', 0);
$tage = bcmod($tage, '365');
$format_jahr = "";
$format_tag = "";
$format_stunde = "";
$format_minute = "";
if ($jahre == 1) {
$format_jahr = " Jahr ";
}else{
$format_jahr = " Jahre ";
}
if ($tage == 1) {
$format_tag = " Tag ";
}else{
$format_tag = " Tage ";
}
if ($stunden == 1) {
$format_stunde = " Stunde ";
}else{
$format_stunde = " Stunden ";
}
if ($minuten == 1) {
$format_minute = " Minute ";
}else{
$format_minute = " Minuten ";
}
if ($jahre == 0){
$format = '%4d' . $format_tag . '%2d' . $format_stunde . '%2d' . $format_minute;
$message = sprintf($format, $tage, $stunden, $minuten);
}
if (($jahre == 0) && ($tage == 0)) {
$format = '%2d' . $format_stunde . '%2d' . $format_minute;
$message = sprintf($format, $stunden, $minuten);
}
if (($jahre == 0) && ($tage == 0) && ($stunden == 0)) {
$format = '%2d' . $format_minute;
$message = sprintf($format,$minuten);
}
if ($jahre > 0) {
$format = '%4d' . $format_jahr . '%4d' . $format_tag . '%2d' . $format_stunde . '%2d' . $format_minute;
$message = sprintf($format, $jahre, $tage, $stunden, $minuten);
}
SetValueString($output_uptime, $message);
?>
Liebe Grüße und danke schonmal
Sascha
Hallo Sascha,
in HTML, und somit auch in WebFront und Konsole, werden mehrere Leerzeichen zu einem zusammengefasst. Ich vermute, das meinst du?
Du kannst deine regulären Leerzeichen aber durch non-breaking spaces ersetzen, dann werden die auch nicht zusammengefasst. Das kannst du tun, indem du einfach str_replace verwendest, bevor du $message in die Variable schreibst: $message = str_replace(’ ', chr(0xa0), $message);
Sascha
20. September 2018 um 10:54
5
ok,
ich hatte nur gehofft, ich könne die „sprintf“ funktion benutzen.
hier würde ich ja zum Beispiel 4 verschiedene integer variablen in einer Zeile ausgeben.
Dabei könnte ich mit der Formatierung angeben, das ich die erste Zahl bis zu 4 stellig haben möchte, die 2 soll bis zu 3 stellig werden, etc.
Dabei kann ich über sprintf dann angeben, das die Leerstellen entweder mit Leerzeichen oder mit „0“ aufgefüllt werden.
Alternativ könnte ich wohl tables benutzen. Da muss ich mich aber erstmal reinlesen, damit habe ich noch nichts gemacht.
Lieben Gruß
Sascha
Du kannst auch sprintf weiterhin verwenden. Meine Codezeile müsstest du nur direkt vor der Ausgabe einfügen.
Die Leerzeichen bleiben übrigens in der Variable auch erhalten, werden dann aber zusammengefasst dargestellt.
Sascha
20. September 2018 um 21:14
7
Ah ! Jetzt hat es „klick“ gemacht
Vielen Dank, so funktioniert das jetzt wunderbar.
Liebe Grüße
Sascha