Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Wycinanie tekstu z pliku html do tablicy
Forum PHP.pl > Forum > Przedszkole
publius
Witam,
mam taką zagwozdkę. Muszę wyciąć pewne dane z kodu html i wsadzić je w tablicę. Taką procedurę musiałbym powtarzać codziennie, więc warto ją zautomatyzoać.
Sęk w tym, że nie wiem jak się za to wziąć. Procedura ma wyglądać tak, że:

1. Wycinam to co jest niepotrzebne na początku:

  1. <table cellspacong="0" cellpadding="0"width="376" align="center">
  2. <tr><td align="left" colspan="4" class="h3">22-12-2008</td></tr>
  3. <tr><td colspan="4"><hr size="1"></td></tr>



A teraz obrabiam każdy wiersz w tabeli:


  1. <tr>
  2. <td width="45" align="right">A</td>
  3. <td>&nbsp;</td>
  4. <td align="left" width="234">B</td>
  5. <td align="right">C</td>
  6. </tr>
  7.  
  8. <tr>
  9. <td width="45" align="right">D</td>
  10. <td>&nbsp;</td>
  11. <td align="left" width="234">E</td>
  12. <td align="right">F</td>
  13. </tr>


itd.


Finalnie dane miałyby być zapisywane do pliku txt w formie CSV:
A,B,C
D,E,F

Z samym zapisem sobie poradzę, ale jak uzyskać array('A','B','C') ?

Na końcu mamy jakiś tam inny kod, który chciąłbym wyciąć - jak zaprogramować jakiś myk, żeby skrypt rozpoznał kiedy kończą się wiersze w tabeli?
Myślałem o funkcji file() i obróbce każdego wiersza z osobna, ale obawiam się, że jak strona zmieni się jakoś z dnia na dzień (tabela jest wbudowana w masę kodu html, i zawsze istnieje prawdopodobieństwo, że zostanie dodana jakaś inna informacja, cyz banner, który zaburzy proces), to będzie klapa i algorytm mi zapisze nie to co trzeba. Będę wdzięczny za każdą wskazówkę. Szukam na razie prostego rozwiązania, bo niestety czas mnie goni. Na dłuższą metę nawet bym Wam głowy nie zawracał. Z góry dzięki za pomoc!
erix
Cytat
Myślałem o funkcji file() i obróbce każdego wiersza z osobna, ale obawiam się, że jak strona zmieni się jakoś z dnia na dzień (tabela jest wbudowana w masę kodu html, i zawsze istnieje prawdopodobieństwo, że zostanie dodana jakaś inna informacja, cyz banner, który zaburzy proces), to będzie klapa i algorytm mi zapisze nie to co trzeba. Będę wdzięczny za każdą wskazówkę. Szukam na razie prostego rozwiązania, bo niestety czas mnie goni.
  1. preg_match" title="Zobacz w manualu PHP" target="_manual
  2. phpQuery - jeśli jesteś przyzwyczajony do składni jQuery i chcesz korzystać z selektorów w PHP
publius
Cytat(erix @ 20.01.2009, 19:09:26 ) *
  1. preg_match" title="Zobacz w manualu PHP" target="_manual
  2. phpQuery - jeśli jesteś przyzwyczajony do składni jQuery i chcesz korzystać z selektorów w PHP


Dzięki!
phpQuery wygląda obiecująco, ale chyba nie zdążę tego opanować... no cóż, spróbuję smile.gif
zegarek84
Kod
$text='<table cellspacong="0" cellpadding="0"width="376" align="center">
<tr><td align="left" colspan="4" class="h3">22-12-2008</td></tr>
<tr><td colspan="4"><hr size="1"></td></tr><tr>
<td width="45" align="right">A</td>
<td>&nbsp;</td>
<td align="left" width="234">B</td>
<td align="right">C</td>
</tr>

<tr>
<td width="45" align="right">D</td>
<td>&nbsp;</td>
<td align="left" width="234">E</td>
<td align="right">F</td>
</tr>';

$preg = preg_match_all('/<td[^>]{14,25}>([^<]+)<\/td>/', $text, $matches);
echo '<pre>';
print_r($matches[1]);
echo '</pre>';

i tąś tablicę potem w pętli możesz przelecieć i co trzeci wyraz jako ten sam z kolumny - gdyż w tej tablicy masz "siurkiem" i przy tym wyrażeniu nie musisz też góry obcinać
publius
Kurcze dzięki! Właśnie miałem dopisać pytanie o te wycinanie.
Czyli to wystarczy, jeśli zaciągnę cały plik? Ten kod mi wytnie to co trzeba? Oczywiście przeanalizuję to, ale od razu pytam, żeby się upewnić smile.gif
erix
Zamiast pytać, sprawdź. winksmiley.jpg

Najpierw sam kombinuj, potem wołaj na forum.
publius
OK sorry, sprawdziłem - chodzi.
Dlaczego jednak kiedy odwołam się do całej tablicy $matches, zamiast $matches[1], wyświetla mi się:

  1. <?php
  2. (
  3.    [0] => Array
  4.        (
  5.            [0] => A
  6.            [1] => B
  7.            [2] => C
  8.            [3] => D
  9.            [4] => E
  10.            [5] => F
  11.        )
  12.  
  13.    [1] => Array
  14.        (
  15.            [0] => A
  16.            [1] => B
  17.            [2] => C
  18.            [3] => D
  19.            [4] => E
  20.            [5] => F
  21.        )
  22.  
  23. )
  24. ?>


Skąd się wzięły 2 tablice?
zegarek84
w $maches[0] wyświetla Ci się znacznie więcej niż widzisz - zerknij w kod wyświetlonej strony....
$maches[0][1] widzisz jako A a w rzeczywistości to jest całe dopasowane wyrażenie regularne czyli:
Kod
<td width="45" align="right">A</td>

poprostu często warto też zaglądać w kod/źródło strony gdyż na monitorze nie wszystko widać
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.