Formatierung will nicht so richtig.....

Hallo Gemeinde,

mal wieder was für zwischendurch :slight_smile:

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

Da fehlen irgendwie Variablen. Magst du ein vollständiges Beispiel geben?

paresy

Entschuldige :slight_smile:

Hatte auf deine Glaskugel gehofft :slight_smile:

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);

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.

Ah ! Jetzt hat es „klick“ gemacht :slight_smile:

Vielen Dank, so funktioniert das jetzt wunderbar.

Liebe Grüße
Sascha