ugrás a tartalomhoz

Adatok kinyerése HTML táblázatból

mortuus · 2008. Jan. 13. (V), 19.20
Sziasztok!
Próbálok html kódból részeket kiszedni...
  1. <tr><td align="left"><span class="szoveg">Számla</span></td><td align="left"><span class="szoveg">10.08. - 10.08.</span></td><td align="right" nowrap="nowrap"><span class="szoveg">1</span></td><td align="right" nowrap="nowrap"><span class="szoveg">00:00:07</span></td><td align="left"><span class="szoveg">perc</span></td><td align="right" nowrap="nowrap"><span class="szoveg">24.00</span></td><td align="right" nowrap="nowrap"><span class="szoveg">20</span></td><td align="right" nowrap="nowrap"><span class="szoveg">2.80</span></td><td align="right" nowrap="nowrap"><span class="szoveg">0.56</span></td><td align="right" nowrap="nowrap"><span class="szoveg">3.36</span></td></tr>  
  2. <tr><td align="left"><span class="szoveg">Számla2</span></td><td align="left"><span class="szoveg">09.20. - 10.13.</span></td><td align="right" nowrap="nowrap"><span class="szoveg">15</span></td><td align="right" nowrap="nowrap"><span class="szoveg">00:24:40</span></td><td align="left"><span class="szoveg">perc</span></td><td align="right" nowrap="nowrap"><span class="szoveg">0.00</span></td><td align="right" nowrap="nowrap"><span class="szoveg">20</span></td><td align="right" nowrap="nowrap"><span class="szoveg">0.00</span></td><td align="right" nowrap="nowrap"><span class="szoveg">0.00</span></td><td align="right" nowrap="nowrap"><span class="szoveg">0.00</span></td></tr>  
  3. <tr><td align="left"><span class="szoveg">Számla3</span></td><td align="left"><span class="szoveg">10.08. - 10.08.</span></td><td align="right" nowrap="nowrap"><span class="szoveg">1</span></td><td align="right" nowrap="nowrap"><span class="szoveg">00:01:18</span></td><td align="left"><span class="szoveg">perc</span></td><td align="right" nowrap="nowrap"><span class="szoveg">24.00</span></td><td align="right" nowrap="nowrap"><span class="szoveg">20</span></td><td align="right" nowrap="nowrap"><span class="szoveg">31.20</span></td><td align="right" nowrap="nowrap"><span class="szoveg">6.24</span></td><td align="right" nowrap="nowrap"><span class="szoveg">37.44</span></td></tr>  
  4. <tr><td align="left"><span class="szoveg">Számla4</span></td><td align="left"><span class="szoveg">09.22. - 10.10.</span></td><td align="right" nowrap="nowrap"><span class="szoveg">6</span></td><td align="right" nowrap="nowrap"><span class="szoveg">00:13:47</span></td><td align="left"><span class="szoveg">perc</span></td><td align="right" nowrap="nowrap"><span class="szoveg">24.00</span></td><td align="right" nowrap="nowrap"><span class="szoveg">20</span></td><td align="right" nowrap="nowrap"><span class="szoveg">330.80</span></td><td align="right" nowrap="nowrap"><span class="szoveg">66.16</span></td><td align="right" nowrap="nowrap"><span class="szoveg">396.96</span></td></tr>  
ezzel próbáltam:
  1. <?php  
  2. print"<table border=1 cellpadding=0 cellspacing=0 width=2000>";  
  3. $minta = 'Számla2';  
  4. $minta2 = 'Számla4';  
  5. $file=file('file.htm');  
  6.   
  7. foreach($file as $seged) {  
  8.     $seged2=split(" ",$seged);  
  9.     foreach($seged2 as $s)  
  10.         {  
  11.         $t=split("  ",$s);  
  12.         foreach($t as $s2)  
  13.         {  
  14.         if($s2==$minta)   
  15.                 {   
  16.                 $talal=true;   
  17.         }  
  18.         if(($talal) and(substr($s2,0,11)!=$minta) )  
  19.             {  
  20.                 $szamlalo++;  
  21.             if ($szamlalo==7)   
  22.                 {  
  23.                 $s2=str_replace("<br>","",$s2);  
  24.                 }  
  25.                   
  26.             }  
  27.             print $s2;  
  28.         }  
  29.           
  30.     }  
  31. }  
  32.   
  33. print"</table>";  
  34. ?>  
nagyon elakadtam, a végeredményként Számla2-t és Számla4-t kellene kiiratnom a sor végéig, de nem megy. pls help!!!
 
1

mi lenne a cél?

gex · 2008. Jan. 13. (V), 19.46
egyrészt nehezen olvasható a kód a random behúzások és a változó "kódolási stílusok" miatt. másrészt a témacím nem volt szerencsés választás, olvasd el a fórumhoz kapcsolódó irányelveket.

mit kéne csinálnia a programnak? beolvasod a file.htm-et, feldarabolod először egy szóközönként, majd két szóközönként és bizonyos feltételek együttállásánál lecseréled a <br> sztringet a nagy semmire. végül mindent kiírsz.
a problémák így első ránézésre:
- a szóközök mentén felosztás nem fog menni másodszor is. ha felosztod a sztringed szóközönként, utána nem fogsz dupla szóközt találni benne.
- a $talal változónak nincs kezdőértéke, de ha valamelyik ciklusmagban igazra állítanád akkor úgy is maradna végig. viszont ez nem fog megtörténni, mert $s2 soha nem lesz Számla2 értékű
- ugyanígy a substr($s2, 0, 11) sem fog soha megegyezni a Számla2 szöveggel
- a $minta2 változóra az inicializáláson kívül sehol sem hivatkozol
- a file.htm - amennyiben abból idéztél az elején - nem is tartalmaz <br> tag-et

szóval mit szeretnél elérni?
3

javítok

mortuus · 2008. Jan. 13. (V), 21.26
Ezt nagyon elba**tam.
Az lenne a feladatom, hogy egy ilyen htm-ből ami sok Számla nevű sort tartalmaz kiemeljek egy párat, pl a Számla sort a Számla2 végéig és Számla4-et és azt irassam ki, csak nem tudom hogyan emeljem ki ezeket a sorokat. Ebben kérnék segítséget, mint látod nem vagyok egy profi programozó.
2

Csak egy tipp.

s_volenszki · 2008. Jan. 13. (V), 20.13
Első ránézésre oylan, mintha az egy <tr></tr> közötti tartalmat kellene vizsgálni, azon belül is, mintha minden <span></span> közötti érték egy-egy eleme lenne az első <span></span> értékéről elnevezett tömbnek.

Vagyis, ha a $szamlak a tömb, akkor a
$szamlak[elso_span_tartalma][elso_ertek_megnevezese] = masodik_span_tartalma;
aztán
$szamlak[elso_span_tartalma][masodik_ertek_megnevezese] = harmadik_span_tartalma;
és így tovább.

Ha azt feltételezzük, hogy a $html változó már tartalmazza a táblázat sorait (a kívánt <tr></tr> összesség) akkor pl.: strip_tags($html, '<span>'); segítségével már csak a span-ok vannak. Aztán pl.: egy str_replace(" class=\"szoveg\"","",$html); és már csak egy explode kell.

De javaslom, inkább használj reguláris kifejezéseket, csak abban én suta vagyok! :)

s_volenszki
4

DOM

lintaba · 2008. Jan. 13. (V), 21.50
a php képes a DOM szerkezetet kezelni(link).