Autor | Zpráva | ||
---|---|---|---|
CJ Profil * |
#1 · Zasláno: 29. 4. 2010, 03:10:31
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> </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> |
||
Joker Profil |
#2 · Zasláno: 29. 4. 2010, 10:06:47
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 |
#3 · Zasláno: 29. 4. 2010, 12:23:25 · Upravil/a: Taps
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 |
#4 · Zasláno: 29. 4. 2010, 13:18:55
zkus domdocument
|
||
CJ Profil * |
#5 · Zasláno: 29. 4. 2010, 14:13:36
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 |
#6 · Zasláno: 29. 4. 2010, 14:18:55
CJ:
aha, nevšiml jsem si že ve výpise jsou obsaženy 2 různé kola |
||
Majkl578 Profil |
#7 · Zasláno: 29. 4. 2010, 14:30:53 · Upravil/a: Majkl578
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); |
||
AM_ Profil |
#8 · Zasláno: 29. 4. 2010, 17:09:55
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 |
#9 · Zasláno: 29. 4. 2010, 17:12:23 · Upravil/a: Majkl578
AM_:
Použil jsem ji kvůli kódování, bez ní byla poškozená diakritika. |
||
__construct Profil |
#10 · Zasláno: 29. 4. 2010, 19:02:13
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 .. |
||
Časová prodleva: 14 let
|
0