php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.06.2005, 14:28  
Benutzer
 
Registriert seit: 11.03.2005
Beiträge: 57
gala
Standard Rechenfehler

Hallo zusammen

Ich habe eine Klasse gemacht welche bestimmte Files aus einem Ordner liest diese einzeln öffnet und bestimmte Daten daraus herausliest.

Das klappt nun (auch mit der Hilfe dieses Boards ) und ich erhalte eine Liste in der jedes File mit Namen angegeben ist und die Daten daneben stehen.

Die Files die eingelesen werden sehen so aus:
Zitat:
#Kopf;F46
#Anschrift1;Luri furi
#Anschrift2;Weg
#Anschrift3;3826 xx
#Seiten;02

#AnzahlFxx;001
#Kopf;F46
#Anschrift1;PEter Pan
#Anschrift2;Alpenrose
#Anschrift3;3826 xx
#Seiten;04

#AnzahlFxx;001
#Kopf;F46
#Anschrift1;xx Fritz
#Anschrift2;Alpenrose
#Anschrift3;3826 Blub
#Seiten;01
#AnzahlFxx;001
Die Klasse liest nun die Zahl die hinter #Seiten; steht aus und addiert diese mit der nächsten. Ausgegeben wir das Total eines Files. Ausserdem schaut sie die "Art" des Files an. Das sind #AnzahlFxx; die sind immer 001 oder 000.

Was nicht klappt ist das Total zusammenrechen. Ich möchte also das die Anzahl Seiten eines Files mit der Anzahl Seiten des zweiten Files addiert werden. Aber da macht er einfach Fehler die ich nicht verstehe. Er rechnet halt falsch

Hier die Klasse:
PHP-Code:
<?php

class Fuck {
    var 
$total;
    var 
$karten;
    
    function 
Lala() {
    
#########################################################################
    #                            DIR lesen                                    #
    #########################################################################
        
        
$verz opendir("files");
        
$verzlink = array ("0");
        while (
$verzfile readdir ($verz))  {
            
// Alle Ordner/Files werden in den Array geschrieben
            
$verzlink[] .=$verzfile
         }
        
          
// Es wird gezählt wieviele Elemente im Array sind
          
$anzahl count($verzlink);

          
// In dieser for-Schleife werden alle
          // Arrayelemente ausgegeben
          
for($x 1$x $anzahl$x++) {    
                 if (
$verzlink[$x] == "." or $verzlink[$x] == ".." or $verzlink[$x] == "0" ) {
                 } else { 
                      echo 
"\n";
                     echo 
"\n";
                      echo 
"<table width=\"480\" border=\"1\">\n";
                     echo 
"<tr>\n";
                     echo 
"<td colspan=\"3\" bgcolor=\"#DDD1BB\">\n";
                     echo 
"Name der Datei ";
                     echo 
"[b]";
                     echo 
$verzlink[$x];
                     echo 
"[/b]";
                     echo 
"</td>\n";
                     echo 
"</tr>\n";
                     echo 
"<tr bgcolor=\"A6BFE0\">\n";
                     echo 
"<td>\n";
                     echo 
"Anzahl TVD Nummern";
                     echo 
"</td>\n";
                     echo 
"<td>\n";
                     echo 
"Anzahl Seiten Total";
                     echo 
"</td>\n";
                     echo 
"<td>\n";
                     echo 
"Art:";
                     echo 
"</td>\n";
                     echo 
"</tr>\n";
                     echo 
"<tr bgcolor=\"#FFFFCC\">\n";
                     
$this->leseseiten($verzlink[$x]);
                     echo 
"</tr>\n";
                     echo 
"<table>\n";
                     echo 
"
\n"
;
                     echo 
"
\n"
;
                 }
          }
          
// Verzeichnis geschlossen
          
closedir($verz); 
    }
    
#########################################################################
    #                                                                        #
    #                            Lesen                                        #
    #                                                                        #
    #########################################################################
    
    
function leseseiten($name) {
        
//text aus file einlesen
        //$text = implode ('', file ("http://mpfi.intra.tierverkehr.ch/bestandeskontrollerechner/files/".$name.""));
        
$text file_get_contents("http://mpfi.intra.tierverkehr.ch/bestandeskontrollerechner/files/".$name."");
        
        
//pregmatch für die seiten
        
preg_match_all("#Seiten;(\d+)#"$text$matchesPREG_PATTERN_ORDER);
        
//für die art
        
preg_match_all("#AnzahlFxx;(\d+)#"$text$artPREG_PATTERN_ORDER);
        
        
//Seiten machen
        
$seiten 0;
        for(
$i '0'$i count($matches[1]); $i++){
            
$seiten += (integer)$matches[1]; 
        }
        
        echo 
"<td>";
        echo 
$seiten;
        echo 
"</td>";
    
        
$alleseiten '0';
        foreach (
$matches[1] as $key => $value) {
            
//echo "TVD Nummer: $key; Wert: $value
n";
            $alleseiten = $alleseiten + $value;
        }
        
        echo "
<td>";
        echo "
Seiten in diesem File";
        echo $alleseiten;
        $this->$total = $this->$total + $alleseiten;
        echo "
 
Zwischentotal:";
        echo $this->$total;
        echo "
</td>";
        
        foreach ($art[1] as $key => $artvalue) {
            //echo "
TVD Nummer$keyWert$value
n
";
        }
        echo "
<td>";
        //echo $artvalue;
        if ($artvalue == '001') {
            $this->$karten = $this->$karten + $seiten;
            echo "
Zwischentotal Karten:";
            echo $this->$karten;
        } else {
            echo "
Keine Karten in diesem File";
        }
        echo "
</td>";
    }
    
}
?>
Also die obere MEthodeLala müsst ihr eigentlich gar nicht beachten, die öffnet einfach jedes File einzeln und lädt dann pro File die MEthode leseseiten().
gala ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 02.06.2005, 14:30  
Gast
 
Beiträge: n/a
Standard

Code:
      //Seiten machen 
      $seiten = 0; 
      for($i = '0'; $i < count($matches[1]); $i++){ 
         $seiten += (integer)$matches[1][$i]; 
      }
(man beachte das von mir eingefügte [$i])
 
Alt 02.06.2005, 14:39  
Benutzer
 
Registriert seit: 11.03.2005
Beiträge: 57
gala
Standard

hmm..

jetzt ist es nicht mehr das was ich eigentlich wollte.

$seiten waren bisher immer "Anzahl vorkommen von "#Seiten;" im File und das war auch gut so.
Da Anzahl Karten == Anzahl Vorkommen von #Seiten; ist falls #AnzahlFxx; == 001.
gala ist offline  
Alt 02.06.2005, 14:48  
Gast
 
Beiträge: n/a
Standard

Der Code-Abschnitt ist trotzdem nicht sauber:

Code:
      //Seiten machen 
      $seiten = count($matches[1]);
Ok. Aber das hat vorher gestimmt? Sag einfach mal welche Variable genau jetzt den falschen Wert hat. $anzahlseiten?
 
Alt 02.06.2005, 15:07  
Benutzer
 
Registriert seit: 11.03.2005
Beiträge: 57
gala
Standard

die klassenvariable $karten ist falsch.

also, $seiten ist richtig da #Seiten; im File 3 mal vorkommen. $alleseiten ist richtig da 04+02+01 = 7.

mit

PHP-Code:
  //echo $artvalue;
      
if ($artvalue == '001') {
         
$this->$karten $this->$karten $seiten;
         echo 
"Zwischentotal Karten:";
         echo 
$this->$karten;
      } else {
         echo 
"Keine Karten in diesem File";
      } 
Hier sage ich ja er soll zu $karten die $seiten dazuzählen. das müsste eigentlich 3 geben. da karten nirgends einen wert aufnimmt (und da in dem beispiel nur 1 file vorhanden ist) aber es gibt 10 aus. (7 + 3 Oo)

edit: also $karten hat einfach den Wert 7. aber das versteh ich nicht...
gala ist offline  
Alt 02.06.2005, 15:11  
Gast
 
Beiträge: n/a
Standard

Es muss $this->karten und nicht $this->$karten heissen...
 
Alt 02.06.2005, 15:22  
Benutzer
 
Registriert seit: 11.03.2005
Beiträge: 57
gala
Standard

habe noch überlegt ob ich dazuschreiben soll das ich nicht nur schlecht in php bin sonder auch neu beim klassenprogrammieren

leider jedoch bleibt das problem das selbe.

edit: wenn ich $this->karte vor der if abfrage ausgebe wird nichts geprintet, was ja auch richtig ist. wenn ich $seiten ausgebe gibt es 3 aus. was ja auch richtig ist.

$this->karten = $this->karten + $seiten;

und irgendwo hier addiert es einfach 7....
gala ist offline  
Alt 02.06.2005, 18:53  
Erfahrener Benutzer
 
Registriert seit: 14.01.2004
Beiträge: 2.543
fantast
fantast eine Nachricht über ICQ schicken
Standard

bitte dran denken, dass 010 nicht zehn ist, wie man vermuten wuerde !
__________________
Was ist validität?
fantast ist offline  
Alt 02.06.2005, 19:10  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

(...), und zwar weil zahlen mit einer 0 am anfang als oktalzahlen angesehen werden.
Buhmann 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

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
peter verzlik

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:02 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.