php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.11.2006, 10:41  
Benutzer
 
Registriert seit: 28.03.2005
Beiträge: 49
center
Standard Inhaltslänge einer Variablen vorgeben

Hi,
ich muss für eine Ausgabe in eine Buchhaltung einige daten aus einer datenbank zusammensuchen und diese in vorgegebene längen formatieren.

hierzu meine frage, gibt es eine möglichkeit, einer variable und/oder einem array eine feste größe und am besten noch eine formatierung zuzuweisen??

bsp1: eine betragdarstellung muss so aussehen 999.999.999,99+, sollte ich jetzte 7,98 als betrag haben muss die darstellung so aussehen 000.000.007.98+

ähnlich ist es bei texten
bsp2: ein text muss 20 stellen haben, auch wenn nur 'hallo' der inhalt ist.
die darstellung muss dann also 'hallo (15 freie stellen) ' sein

ich hoffe ihr könnt mir helfen.

danke im vorraus
center ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 23.11.2006, 11:08  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

(Thread verschoben)

Natürlich gibts sowas nicht implementiert. Hier der Algorithmus, hatte grad Bock. In Zukunft kannst du dich aber ruhig selbst an die Sache ranmachen

PHP-Code:
<?php
class Buchhaltung
{
  private 
$_text;
  private 
$_betrag;

  public function 
setText($sText)
  {
    
// String auf insgesamt 15 Zeiche mit Leerzeichen auffüllen (rechts)
    
$this->_text str_pad($sText15' 'STR_PAD_RIGHT);
  }
  public function 
getText()
  {
    return 
$this->_text;
  }
  
  public function 
setBetrag($dBetrag)
  {
    
// splitte Betrag in Euro und Cent
    
@list ($iEuro$iCent) = explode('.'$dBetrag2);
    
// fülle Nullen auf
    
$sTmp str_pad($iEuro9'0'STR_PAD_LEFT);
    
// teile den String in 3er Päckchen auf und setze als Trennzeichen den Punkt
    
$sTmp chunk_split($sTmp3'.');
    if (isset(
$iCent)) {
        
// Cent gesetzt? Dann Cent-Betrag anhängen
        
$sTmp .= $iCent;
    } else {
        
// Cent nicht gesetzt? Ganzzahl übergeben! Daher @ bei list ()
        // schneide den letzten durch chunk_split angefügten . ab
        
$sTmp substr($sTmp0, -1);
    }
    
// setze Vorzeichen ans Ende
    
if ($dNumber >= 0) {
        
$sTmp .= '+';
    } else {
        
$sTmp .= '-';
    }
    
$this->_betrag $sTmp;
  }

  function 
getBetrag()
  {
    return 
$this->_betrag;
  }
}

$oBuchhaltung = new Buchhaltung();
$oBuchhaltung->setText('Hallo');
echo 
'#'$oBuchhaltung->getText(), '#
'
"\n";
$oBuchhaltung->setBetrag(7.98);
echo 
'#'$oBuchhaltung->getBetrag(), '#';
?>
MySQL wird dir übrigens, wenn du als Feldlänge nicht CHAR(15) verwendest, führende und angehängte Leerzeichen entfernen.

Rechnerisch ist deine Zahlendarstellung auch äußerst fragwürdig.

Mal wieder so ein nutzloses Format, dass nichts als rechnerei ausmacht. Einen praktischen Nutzen hat es nicht, auch nicht Lesbarkeit.

Vielleicht mal
http://de.php.net/number_format
anschauen.
Zergling-new ist offline  
Alt 23.11.2006, 11:16  
Benutzer
 
Registriert seit: 28.03.2005
Beiträge: 49
center
Standard

ersteinmal vielen herzlichen dank.. das war wirklich mehr als ich erwartet hatte

da ich nicht wirklich wusste nach welchem begriff ich suchen sollte ist mir das natürlich entsprechend schwer gefallen.

die funktion die wirklich hilfreich ist, ist str_pad...

danke dir
center ist offline  
Alt 23.11.2006, 11:19  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hatte noch einen kleinen Fehler drin, Zeile 39 hatte ich den Wert nicht gesetzt.

Und vielleicht läßt du die Formatierung die getter-Methoden übernehmen, mit $this->_betrag kannst du nämlich jetzt nicht mehr rechnen, ohne den "000.000.123.45+" String zurückzuwandeln.
Zergling-new ist offline  
Alt 23.11.2006, 11:27  
Benutzer
 
Registriert seit: 28.03.2005
Beiträge: 49
center
Standard

ich werde mal schauen wie aufwendig das ganze werden muss.
ich bin gerde dabei das gerüst mit dummy-wertenzufüllen, um den kompletten buchungssatz zu erstellen, soweit ich das überblicken kann, werden z.b. die beträge schon im richtigen format (12,89) geliefert, d.h. ich müsste hinten nur + anhängen und vorne auffüllen.

aber genaueres werde ich sehen wenn ich die vormirliegende fleissarbeit - string zusammensetzen - erledigt habe
center ist offline  
Alt 23.11.2006, 12:53  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von Zergling
Und vielleicht läßt du die Formatierung die getter-Methoden übernehmen, mit $this->_betrag kannst du nämlich jetzt nicht mehr rechnen, ohne den "000.000.123.45+" String zurückzuwandeln.
Das will ich mal ganz deutlich unterstreichen.
Formatierung und Datenspeicherung sollten getrennt sein.

Und was das Rechnen betrifft:
Mit Strings zu rechnen finde ich sowieso total krank.
Und das nicht nur, weil "012345" einen anderen Wert hat als 012345.

Ebensowenig wie man Kühlschränke multipliziert oder eine Waschmaschine durch eine halbe Stunde dividiert, ist das Rechnen mit Zeichenketten sinnvoll.

Die haben m.E. nur bei der Ein- und Ausgabe eine Berechtigung, wenn es um Zahlen geht. Dazwischen sollten Zahlen auch wie Zahlen behandelt werden.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 23.11.2006, 14:15  
Benutzer
 
Registriert seit: 28.03.2005
Beiträge: 49
center
Standard

zum glück muss ich mit diesen zahlen nicht rechnen, sondern nur auflisten, damit fällt diese hürde......... momentan
center ist offline  
Alt 23.11.2006, 17:20  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ist ja keine Hürde, sondern nur Verschieben von Code von der setter- in die getter-Methode.
Zergling-new ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Klasse statt globaler Variablen ecomeback PHP-Fortgeschrittene 6 15.07.2008 16:30
Übergeben von Variablen an in PHP eingebundenes Perl-Script shredder01 PHP Tipps 2008 3 04.04.2008 09:25
Datei mit Variablen so includen, dass Variablen nutzbar? BartTheDevil89 PHP Tipps 2008 6 22.01.2008 20:57
unerklärliches Leeren von Variablen KuShi PHP Tipps 2007 2 08.07.2007 15:19
Teil einer Variablen mit einer Variablen ersetzen ? simsalabim PHP Tipps 2007 11 20.03.2007 20:36
Function und Variablen Quagga PHP Tipps 2006 2 11.08.2006 18:23
variablen aus textfile erzeugen (shellscript) noskule Server, Hosting und Workstations 2 19.07.2006 15:42
Variable aus Variablen zusammensetzen juhuwoorps PHP Tipps 2007 1 28.11.2005 21:50
Variablen übergeben PHP Tipps 2005-2 9 30.08.2005 10:58
$_GET Variablen weitergeben PHP Tipps 2005 3 01.03.2005 15:36
Variablen übergeben bzw. auslesen? PHP Tipps 2005 4 30.01.2005 03:56
2 variablen in einem Value tag PHP Tipps 2005 17 26.01.2005 20:32
[Erledigt] register globals off bei variablen Variablen... PHP Tipps 2005 4 25.01.2005 17:50
Existenz mehrerer Variablen prüfen PHP Tipps 2004 3 31.08.2004 14:30
Variablen per adresse übergeben rocco PHP Tipps 2004 7 24.07.2004 12:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
access feldlänge auf 20 zeichen auffüllen, zeichenlänge vorgeben php, zeichenlänge von text vorgeben php, string in 3er päckchen, str_pad führende leerzeichen, feldlänge auf 20 zeichen mit 0 auffüllen access, javascript vorzeichen variable, str_pad echo leerzeichen, str_pad( $zeile , (( $_get[\'max\'] > 99) ? 3 : 2), \0\, str_pad_left)

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:58 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.