Autor Zpráva
CJ
Profil *
Dobrý den,

hledám hodnou duši, která by mi zdarma pomohla s tímto problémem.
Mám tento HTML kód, který generuje jistý program od Pavla Vraje (FRC).
A já bych si rád uložil tyto zápasy do databáze.
Stěžejní je pro mě herní kolo, a pak jednotlivé údaje v bunkách.

Zkoušel jsem to všelijak přes různé regulární výrazy ale nejsem schopen to nějak inteligentně poskládat. (Když už vytáhnu jednotlivé údaje z buněk, tak to zase nespojím s herním kolem, protože herní kolo se vyskytuje vždy jako 1 řádek nad prvním zápasem daného kola). Prostě mi to nejde.

Byl by tedy někdo tak laskav, kdo se nudí, nebo si chce vyzkoušet tento nepříliš jednoduchý úkol?

Děkuji velmi.


  <tr>
    <td rowspan=6 align="center" valign="middle"><font size=-2>12. KOLO</font></td>
    <td align="center"><font size=-2>10.9.</font></td>
    <td align="center"><font size=-2>17:00</font></td>
    <td align="left"><font size=-2>FC ŠEBÁNEK</font></td>
    <td align="left"><font size=-2>ROZJETEJ STROJ</font></td>
    <td align="right"><font size=-2><B>&nbsp;</B></font></td>
    <td align="right"><font size=-2>&nbsp;</font></td>
    <td align="left"><font size=-2>&nbsp;</font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>10.9.</font></td>
    <td align="center"><font size=-2>17:53</font></td>
    <td align="left"><font size=-2>BOMBERS TEAM</font></td>
    <td align="left"><font size=-2>STATUS QUO</font></td>
    <td align="right"><font size=-2><B>&nbsp;</B></font></td>
    <td align="right"><font size=-2>&nbsp;</font></td>
    <td align="left"><font size=-2>&nbsp;</font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>10.9.</font></td>
    <td align="center"><font size=-2>18:46</font></td>
    <td align="left"><font size=-2>ELITA CHASERS</font></td>
    <td align="left"><font size=-2>VIPER TEAM</font></td>
    <td align="right"><font size=-2><B>&nbsp;</B></font></td>
    <td align="right"><font size=-2>&nbsp;</font></td>
    <td align="left"><font size=-2>&nbsp;</font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>10.9.</font></td>
    <td align="center"><font size=-2>19:39</font></td>
    <td align="left"><font size=-2>PROŠLÝ MLÍKA</font></td>
    <td align="left"><font size=-2>RVHP</font></td>
    <td align="right"><font size=-2><B>&nbsp;</B></font></td>
    <td align="right"><font size=-2>&nbsp;</font></td>
    <td align="left"><font size=-2>&nbsp;</font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>10.9.</font></td>
    <td align="center"><font size=-2>20:32</font></td>
    <td align="left"><font size=-2>OSPLPPOTR.</font></td>
    <td align="left"><font size=-2>FC KEBOURY</font></td>
    <td align="right"><font size=-2><B>&nbsp;</B></font></td>
    <td align="right"><font size=-2>&nbsp;</font></td>
    <td align="left"><font size=-2>&nbsp;</font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>10.9.</font></td>
    <td align="center"><font size=-2>21:25</font></td>
    <td align="left"><font size=-2>AC PELYŇKOVÝ DESTILÁT UNITED</font></td>
    <td align="left"><font size=-2>LOSERS OF UFTALAND</font></td>
    <td align="right"><font size=-2><B>&nbsp;</B></font></td>
    <td align="right"><font size=-2>&nbsp;</font></td>
    <td align="left"><font size=-2>&nbsp;</font></td>
  </tr>
  <tr>
    <td rowspan=6 align="center" valign="middle"><font size=-2>13. KOLO</font></td>
    <td align="center"><font size=-2>17.9.</font></td>
    <td align="center"><font size=-2>17:00</font></td>
    <td align="left"><font size=-2>LOSERS OF UFTALAND</font></td>
    <td align="left"><font size=-2>OSPLPPOTR.</font></td>
    <td align="right"><font size=-2><B>&nbsp;</B></font></td>
    <td align="right"><font size=-2>&nbsp;</font></td>
    <td align="left"><font size=-2>&nbsp;</font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>17.9.</font></td>
    <td align="center"><font size=-2>17:53</font></td>
    <td align="left"><font size=-2>FC KEBOURY</font></td>
    <td align="left"><font size=-2>PROŠLÝ MLÍKA</font></td>
    <td align="right"><font size=-2><B>&nbsp;</B></font></td>
    <td align="right"><font size=-2>&nbsp;</font></td>
    <td align="left"><font size=-2>&nbsp;</font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>17.9.</font></td>
    <td align="center"><font size=-2>18:46</font></td>
    <td align="left"><font size=-2>AC PELYŇKOVÝ DESTILÁT UNITED</font></td>
    <td align="left"><font size=-2>FC ŠEBÁNEK</font></td>
    <td align="right"><font size=-2><B>&nbsp;</B></font></td>
    <td align="right"><font size=-2>&nbsp;</font></td>
    <td align="left"><font size=-2>&nbsp;</font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>17.9.</font></td>
    <td align="center"><font size=-2>19:39</font></td>
    <td align="left"><font size=-2>RVHP</font></td>
    <td align="left"><font size=-2>ELITA CHASERS</font></td>
    <td align="right"><font size=-2><B>&nbsp;</B></font></td>
    <td align="right"><font size=-2>&nbsp;</font></td>
    <td align="left"><font size=-2>&nbsp;</font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>17.9.</font></td>
    <td align="center"><font size=-2>20:32</font></td>
    <td align="left"><font size=-2>VIPER TEAM</font></td>
    <td align="left"><font size=-2>BOMBERS TEAM</font></td>
    <td align="right"><font size=-2><B>&nbsp;</B></font></td>
    <td align="right"><font size=-2>&nbsp;</font></td>
    <td align="left"><font size=-2>&nbsp;</font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>17.9.</font></td>
    <td align="center"><font size=-2>21:25</font></td>
    <td align="left"><font size=-2>STATUS QUO</font></td>
    <td align="left"><font size=-2>ROZJETEJ STROJ</font></td>
    <td align="right"><font size=-2><B>&nbsp;</B></font></td>
    <td align="right"><font size=-2>&nbsp;</font></td>
    <td align="left"><font size=-2>&nbsp;</font></td>
  </tr>
  
  
  
Joker
Profil
CJ:
Jestli ten formát je přesně takový jako je ukázka (včetně řádkování a tak a nemůže se stát, že by nějaká buňka chyběla), šlo by to takhle:
(0. do proměnné pro data dostanu vnitřek tabulky)
1. Přes substr a strpos si do dočasné proměnné přesunout všechno až za konec nejbližšího "</tr>" a odstranit z proměnné s daty.
2. u dočasné proměnné strip_tags
3. u dočasné proměnné trim (zruší nechtěné konce řádků na začátku a na konci)
4. dočasnou proměnnou rozsekat po řádcích do pole (explode)
5. na každou hodnotu pole trim(). V poli by teď měly být hodnoty jednotlivých buněk.
6. Pokud pole má 8 prvků, nastavím si kolo jako pole[0], jinak hodnotu kolo přidám na začátek pole (array_unshift)
(druhá varianta: Místo 8 prvků testovat, jestli první prvek obsahuje text "KOLO")
7. Pole by teď mělo obsahovat všechna potřebná data v jednotném pořadí (1. prvek kolo, 2. prvek datum, atd.), zpracovat data podle potřeby
8. Opakovat, dokud zbývají ještě nějaké řádky tabulky.
Taps
Profil
vyzkoušej toto: text je uložen v proměnné $retez
//upravime hodnoty
$co=array(' align="center"',' align="left"');
$out=str_replace($co,'',$retez);

//ziskame kolo
if(strpos($retez,'KOLO')!==false){
$kolo=is_numeric(substr($retez,strpos($retez,'KOLO')-4,2)) ? substr($retez,strpos($retez,'KOLO')-4,2) : substr($retez,strpos($retez,'KOLO')-3,1);
}


//regulár
  preg_match_all('~<td><font size=-2>(.+?)</font></td>~s',$out,$vystup);
  $obsah.='<table><tr><th>Kolo</th><th>Datum</th><th>Čas</th><th>Domací</th><th>Hoste</th></tr>';
for($t=0;$t<count($vystup[1]);$t++)
  {
  if($vystup[1][3+(5*$t)]!=''){
   $obsah.='<tr><td>'.$kolo.'</td><td>'.$vystup[1][0+(5*$t)].'</td><td>'.$vystup[1][1+(5*$t)].'</td><td>'.$vystup[1][2+(5*$t)].'</td><td>'.$vystup[1][3+(5*$t)].'</td>';
  echo "insert into tabulka  values('$kolo','".$vystup[1][0+(5*$t)]."','".$vystup[1][1+(5*$t)]."','".$vystup[1][2+(5*$t)]."','".$vystup[1][3+(5*$t)]."')<br>";
  }
  }
  $obsah.='</table>';
  print $obsah;

?>
AM_
Profil
zkus domdocument
CJ
Profil *
Joker: Díky tvůj návod mi pomohl, udělal jsem to hodně podobně.
Taps: Tvoje reseni je zajimave, trosku kostrbate ale dejmetomu. Nicmene to uklada 12kolo i kdyz v tom vyrezu je i 13 kolo, mas tam nekde chybku. Ale dekuju.
AM_: Diky, ale DOM model je na me uz moc slozity.

Pokud bude mit nekdo zajem, hodim sem i svoji verzi.
Taps
Profil
CJ:
aha, nevšiml jsem si že ve výpise jsou obsaženy 2 různé kola
Majkl578
Profil
Zkusil jsem sestavit parser pomocí DOMDocument:

$data = <<< DATA
  <tr>
    <td rowspan=6 align="center" valign="middle"><font size=-2>12. KOLO</font></td>
    <td align="center"><font size=-2>10.9.</font></td>
    <td align="center"><font size=-2>17:00</font></td>
    <td align="left"><font size=-2>FC ŠEBÁNEK</font></td>
    <td align="left"><font size=-2>ROZJETEJ STROJ</font></td>
    <td align="right"><font size=-2><B> </B></font></td>
    <td align="right"><font size=-2> </font></td>
    <td align="left"><font size=-2> </font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>10.9.</font></td>
    <td align="center"><font size=-2>17:53</font></td>
    <td align="left"><font size=-2>BOMBERS TEAM</font></td>
    <td align="left"><font size=-2>STATUS QUO</font></td>
    <td align="right"><font size=-2><B> </B></font></td>
    <td align="right"><font size=-2> </font></td>
    <td align="left"><font size=-2> </font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>10.9.</font></td>
    <td align="center"><font size=-2>18:46</font></td>
    <td align="left"><font size=-2>ELITA CHASERS</font></td>
    <td align="left"><font size=-2>VIPER TEAM</font></td>
    <td align="right"><font size=-2><B> </B></font></td>
    <td align="right"><font size=-2> </font></td>
    <td align="left"><font size=-2> </font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>10.9.</font></td>
    <td align="center"><font size=-2>19:39</font></td>
    <td align="left"><font size=-2>PROŠLÝ MLÍKA</font></td>
    <td align="left"><font size=-2>RVHP</font></td>
    <td align="right"><font size=-2><B> </B></font></td>
    <td align="right"><font size=-2> </font></td>
    <td align="left"><font size=-2> </font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>10.9.</font></td>
    <td align="center"><font size=-2>20:32</font></td>
    <td align="left"><font size=-2>OSPLPPOTR.</font></td>
    <td align="left"><font size=-2>FC KEBOURY</font></td>
    <td align="right"><font size=-2><B> </B></font></td>
    <td align="right"><font size=-2> </font></td>
    <td align="left"><font size=-2> </font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>10.9.</font></td>
    <td align="center"><font size=-2>21:25</font></td>
    <td align="left"><font size=-2>AC PELYŇKOVÝ DESTILÁT UNITED</font></td>
    <td align="left"><font size=-2>LOSERS OF UFTALAND</font></td>
    <td align="right"><font size=-2><B> </B></font></td>
    <td align="right"><font size=-2> </font></td>
    <td align="left"><font size=-2> </font></td>
  </tr>
  <tr>
    <td rowspan=6 align="center" valign="middle"><font size=-2>13. KOLO</font></td>
    <td align="center"><font size=-2>17.9.</font></td>
    <td align="center"><font size=-2>17:00</font></td>
    <td align="left"><font size=-2>LOSERS OF UFTALAND</font></td>
    <td align="left"><font size=-2>OSPLPPOTR.</font></td>
    <td align="right"><font size=-2><B> </B></font></td>
    <td align="right"><font size=-2> </font></td>
    <td align="left"><font size=-2> </font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>17.9.</font></td>
    <td align="center"><font size=-2>17:53</font></td>
    <td align="left"><font size=-2>FC KEBOURY</font></td>
    <td align="left"><font size=-2>PROŠLÝ MLÍKA</font></td>
    <td align="right"><font size=-2><B> </B></font></td>
    <td align="right"><font size=-2> </font></td>
    <td align="left"><font size=-2> </font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>17.9.</font></td>
    <td align="center"><font size=-2>18:46</font></td>
    <td align="left"><font size=-2>AC PELYŇKOVÝ DESTILÁT UNITED</font></td>
    <td align="left"><font size=-2>FC ŠEBÁNEK</font></td>
    <td align="right"><font size=-2><B> </B></font></td>
    <td align="right"><font size=-2> </font></td>
    <td align="left"><font size=-2> </font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>17.9.</font></td>
    <td align="center"><font size=-2>19:39</font></td>
    <td align="left"><font size=-2>RVHP</font></td>
    <td align="left"><font size=-2>ELITA CHASERS</font></td>
    <td align="right"><font size=-2><B> </B></font></td>
    <td align="right"><font size=-2> </font></td>
    <td align="left"><font size=-2> </font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>17.9.</font></td>
    <td align="center"><font size=-2>20:32</font></td>
    <td align="left"><font size=-2>VIPER TEAM</font></td>
    <td align="left"><font size=-2>BOMBERS TEAM</font></td>
    <td align="right"><font size=-2><B> </B></font></td>
    <td align="right"><font size=-2> </font></td>
    <td align="left"><font size=-2> </font></td>
  </tr>
  <tr>
    <td align="center"><font size=-2>17.9.</font></td>
    <td align="center"><font size=-2>21:25</font></td>
    <td align="left"><font size=-2>STATUS QUO</font></td>
    <td align="left"><font size=-2>ROZJETEJ STROJ</font></td>
    <td align="right"><font size=-2><B> </B></font></td>
    <td align="right"><font size=-2> </font></td>
    <td align="left"><font size=-2> </font></td>
  </tr>
DATA;

$ary = array();

$dom = new DOMDocument();
$dom->loadHTML('<?xml encoding="UTF-8">' . $data);
$trs = $dom->getElementsByTagName('tr');
for ($i = 0; $i < $trs->length; $i++) {
    $tds = $trs->item($i)->getElementsbyTagName('td');
    for ($j = 0; $j < $tds->length; $j++) {
        $ary[$i][$j] = $tds->item($j)->getElementsByTagName('font')->item(0)->nodeValue;
    }
}

var_dump($ary);
Od zkušenějších uvítám (běžně s DOMDocument nedělám) opravy/úpravy.
AM_
Profil
Nejsem o moc zkušenější, ale myslím, že metoda loadHTML nepotřebuje prefixovat XML hlavičkou, naopak, v klasickém HTML nemá co dělat. Takže buď jí tam nedávat, nebo použít loadXML
Majkl578
Profil
AM_:
Použil jsem ji kvůli kódování, bez ní byla poškozená diakritika.
__construct
Profil
Keby si si prečítal manuál tak by si si všimol:

Note:
DOM extension uses UTF-8 encoding. Use utf8_encode() and utf8_decode() to work with texts in ISO-8859-1 encoding or Iconv for other encodings.

súhlasím s AM_ - naozaj tam netreba pridávať ten XML tag ..

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0