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...

<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>
<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>
<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>
<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:

<?php
print"<table border=1 cellpadding=0 cellspacing=0 width=2000>";
$minta = 'Számla2';
$minta2 = 'Számla4';
$file=file('file.htm');

foreach($file as $seged) {
	$seged2=split("	",$seged);
	foreach($seged2 as $s)
		{
		$t=split("	",$s);
		foreach($t as $s2)
  		{
		if($s2==$minta) 
             	{ 
                $talal=true; 
		}
		if(($talal) and(substr($s2,0,11)!=$minta) )
			{
    			$szamlalo++;
			if ($szamlalo==7) 
				{
				$s2=str_replace("<br>","",$s2);
				}
				
			}
			print $s2;
		}
		
	}
}

print"</table>";
?>
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).