Zur Navigation

Zeichen entfernen

1 tobi

hallo zusammen,

ich habe ein kleines problem, beim auslesen einer seite.
aufgrund eines zeichens mehr bekomme ich ein verfälschtes ergebnis. nur weiss ich nicht genau, wie ich es beheben kann.

ergebniss aktuell:
0 TTC Halloheim 0 0 0 0 0:0 0 0:0
0 >TV Bad Herrlichau II 0 0 0 0 0:0 0 0:0

wie man hier sehen kann ist ein > zuviel, weil in einem link eine zahl mehr ist wie bei TTC Halloheim


  <table class="beginn" cellpadding="0" border="0" cellspacing="0">
    <tr>
      <th>&nbsp;</th>
      <th class="111111">Platz</th>
      <th>Team</th>
      <th class="111111">Spiel</th>
      <th class="111111">S</th>
      <th class="111111">U</th>
      <th class="111111">N</th>
      <th class="111111">Spiele</th>
      <th class="111111">+/-</th>
      <th class="111111">Punkte</th>
    </tr>
    
      
        <tr>
          <td>&nbsp;</td>
          <td align="111111">0</td>
          <td nowrap="nowrap">
            <a alt="Portrait und Bilanzen" title="Portrait und Bilanzen" href="/cgi-bin/123Objects/5555566677.123/6/wa/teamPortrait?teamtable=993022&amp;pageState=runde&amp;championship=BBB+555.+06%2F07&amp;wosid=AdkaGiXA5LW9aqxAKpODYw&amp;group=111111">TTC Halloheim </a>
          </td>
          <td align="111111">0</td>
          <td align="111111">0</td>
          <td align="111111">0</td>
          <td align="111111">0</td>
          <td align="111111">0:0</td>
          <td align="111111">0</td>
          <td align="111111">0:0</td>
        </tr>
      
        <tr>
          <td>&nbsp;</td>
          <td align="111111">0</td>
          <td nowrap="nowrap">
            <a alt="Portrait und Bilanzen" title="Portrait und Bilanzen" href="/cgi-bin/123Objects/5555566677.123/6/wa/teamPortrait?teamtable=1026313&amp;pageState=runde&amp;championship=BBB+555.+06%2F07&amp;wosid=AdkaGiXA5LW9aqxAKpODYw&amp;group=111111">TV Bad Herrlichau II </a>
          </td>
          <td align="111111">0</td>
          <td align="111111">0</td>
          <td align="111111">0</td>
          <td align="111111">0</td>
          <td align="111111">0:0</td>
          <td align="111111">0</td>
          <td align="111111">0:0</td>
        </tr>
  </table>

mit folgedem code bearbeite ich das ganze:

//Tabelle leeren
mysql_query("TRUNCATE TABLE tabelle_herren1") or die(mysql_error());

// alles bis auf Tabelle entfernen
$x=substr($x,strpos($x,"<table class=\"beginn\""));
$x=substr($x,0,strpos($x,"</table>"));

// Kopfzeile der Tabelle entfernen
$x=substr($x,strpos($x,"</tr>")+5);

// Solange noch eine Plazierung gefunden wird => Schleife ausf?hren
while(strpos($x,"<tr") !== false) {
         // Anfangsposition der Plazierung ermitteln
         $startpos=strpos($x,"<tr");
         // Endposition des Plazierung ermitteln
         $endpos=strpos($x,"</tr>");
         // Spielzeile in $spielstr speichern
         $spielstr=substr($x,$startpos,$endpos-$startpos);

         // Spalte verwerfen
         $spielstr=substr($spielstr,strpos($spielstr,"<td>")+3);
         $spielstr=substr($spielstr,strpos($spielstr,"</td>")+5);

         // Platzierung bestimmen
         $spielstr=substr($spielstr,strpos($spielstr,">")+1);
         $platz = trim(substr($spielstr,0,strpos($spielstr,"<")));
         $spielstr=substr($spielstr,strpos($spielstr,"</td>")+5);

         // Verein bestimmen
         $spielstr=substr($spielstr,strpos($spielstr,">")+295);
         $verein = trim(substr($spielstr,0,strpos($spielstr,"<")));
         $spielstr=substr($spielstr,strpos($spielstr,"</td>")+5);

         // Anzahl der Spielbegegnungen bestimmen
         $spielstr=substr($spielstr,strpos($spielstr,">")+1);
         $begegnungsanzahl = trim(substr($spielstr,0,strpos($spielstr,"<")));
         $spielstr=substr($spielstr,strpos($spielstr,"</td>")+5);

         // Anzahl der Siege bestimmen
         $spielstr=substr($spielstr,strpos($spielstr,">")+1);
         $sieg = trim(substr($spielstr,0,strpos($spielstr,"<")));
         $spielstr=substr($spielstr,strpos($spielstr,"</td>")+5);

         // Anzahl der Unentschieden bestimmen
         $spielstr=substr($spielstr,strpos($spielstr,">")+1);
         $unentschieden = trim(substr($spielstr,0,strpos($spielstr,"<")));
         $spielstr=substr($spielstr,strpos($spielstr,"</td>")+5);

         // Anzahl der Niederlagen bestimmen
         $spielstr=substr($spielstr,strpos($spielstr,">")+1);
         $niederlage = trim(substr($spielstr,0,strpos($spielstr,"<")));
         $spielstr=substr($spielstr,strpos($spielstr,"</td>")+5);

         // Anzahl der erspielten Punkte bestimmen
         $spielstr=substr($spielstr,strpos($spielstr,">")+1);
         $spielpunkte = trim(substr($spielstr,0,strpos($spielstr,"<")));
         $spielstr=substr($spielstr,strpos($spielstr,"</td>")+5);

         // Anzahl der Differenz der Spielpunkte bestimmen
         $spielstr=substr($spielstr,strpos($spielstr,">")+1);
         $differenz = trim(substr($spielstr,0,strpos($spielstr,"<")));
         $spielstr=substr($spielstr,strpos($spielstr,"</td>")+5);

         // Anzahl der Gesamtpunkte bestimmen
         $spielstr=substr($spielstr,strpos($spielstr,">")+1);
         $punkte = trim(substr($spielstr,0,strpos($spielstr,"<")));
         $spielstr=substr($spielstr,strpos($spielstr,"</td>")+5);

         echo $platz."\n";
         echo $verein."\n";
         echo $begegnungsanzahl."\n";
         echo $sieg."\n";
         echo $unentschieden."\n";
         echo $niederlage."\n";
         echo $spielpunkte."\n";
         echo $differenz."\n";
         echo $punkte."\n";

                 mysql_query("INSERT INTO tabelle_herren1
                 (platz, verein, begegnungsanzahl, sieg, unentschieden, niederlage, spielpunkte, differenz, punkte)
                 VALUES
                 ('$platz', '$verein', '$begegnungsanzahl', '$sieg', '$unentschieden', '$niederlage', '$spielpunkte', '$differenz', '$punkte')")
                 or die(mysql_error());


         // bearbeitete Plazierung aus Gesamtliste entfernen
         $x=substr($x,strpos($x,"</tr>")+5);

         }

//Datenbank schließen
mysql_close($link);

?>

12.07.2010 23:06 | geändert: 12.07.2010 23:33

2 Jörg

Mithilfe von strpos() kannst du die Position des ">" ermitteln und diese dann in substr() anstelle der fixen Zahl 295 verwenden

13.07.2010 15:32 | geändert: 13.07.2010 15:33

3 tobi

so?


         // Verein bestimmen
         $spielstr=substr(strpos($spielstr,">")$spielstr);
         $verein = trim(substr($spielstr,0,strpos($spielstr,"<")));
         $spielstr=substr($spielstr,strpos($spielstr,"</td>")+5);

13.07.2010 18:47

4 Jörg

Wohl eher so:
         $pos = strpos($spielstr,">");
         $spielstr=substr($spielstr,strpos($spielstr,">")+$pos);
         $verein = trim(substr($spielstr,0,strpos($spielstr,"<")));
         $spielstr=substr($spielstr,strpos($spielstr,"</td>")+5);

... und dann lässt du dir per echo zwischendurch die jeweiligen Werte ausgeben um zu sehen, ob du auf dem richtigen Dampfer bist

13.07.2010 20:17

5 tobi

eher nein, liefert folgendes aus

0 trait und Bilanzen" title="Portrait und Bilanzen" href="/cgi-bin/123Objects/5555566677.123/6/wa/teamPortrait?teamtable=993022&amp;pageState=runde&amp;championship=BBB+555.+06%2F07&amp;wosid=AdkaGiXA5LW9aqxAKpODYw&amp;group=111111">TTC Halloheim 0 0 0 0 0:0 0 0:0

13.07.2010 22:42

6 Jörg

Das ist schon der richtige Weg. Wenn du dir auch noch den Wert von $pos ausgeben lassen würdest, könntest du leicht sehen, was du noch ändern musst.

Der Abschnitt enthält zwei ">" bis zum Text, den du extrahieren musst - du musst also die Position des zweiten ">" ermitteln - hierzu kann der dritte Parameter von strpos() hilfreich sein.

14.07.2010 01:28

7 tobi

wenn ich mir jetzt nur $pos ausliefern lasse, dann wird die zahl 30 ausgegeben.

(wird wohl die 30 seien, die hier drinne auftaucht: 993022)

14.07.2010 16:57

8 Jörg

30 ist die Position des ersten ">" (d.h. vom <td>). Wenn du die Position des zweiten ">" (d.h. vom <a>) ermitteln möchtest, lass strpos ab dem 31. Zeichen suchen:

$pos = strpos($spielstr,">", 31);

14.07.2010 17:14

9 tobi

aso die position ok.

das zweite liegt dann bei: 324 324 324 324 325 324 325 325 325 324

14.07.2010 17:20

10 Jörg

Es sollte dann eigentlich so funktionieren:

         // Verein bestimmen
         $spielstr=substr($spielstr,strpos($spielstr,">",31));
         $verein = trim(substr($spielstr,0,strpos($spielstr,"<")));
         $spielstr=substr($spielstr,strpos($spielstr,"</td>")+5);

14.07.2010 17:32