Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Wycinanie tekstu z pliku html do tablicy
publius
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 24.09.2003
Skąd: Piaskownica

Ostrzeżenie: (0%)
-----


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!
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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
Go to the top of the page
+Quote Post
publius
post
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 24.09.2003
Skąd: Piaskownica

Ostrzeżenie: (0%)
-----


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ę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
zegarek84
post
Post #4





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


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ć

Ten post edytował zegarek84 20.01.2009, 22:00:34
Go to the top of the page
+Quote Post
publius
post
Post #5





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 24.09.2003
Skąd: Piaskownica

Ostrzeżenie: (0%)
-----


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ć (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Zamiast pytać, sprawdź. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Najpierw sam kombinuj, potem wołaj na forum.
Go to the top of the page
+Quote Post
publius
post
Post #7





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 24.09.2003
Skąd: Piaskownica

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
zegarek84
post
Post #8





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


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ć

Ten post edytował zegarek84 20.01.2009, 18:54:15
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 18:15