За последние 24 часа нас посетили 25728 программистов и 1726 роботов. Сейчас ищет 851 программист ...

Экспорт html таблицы из текстового файла в MySql

Тема в разделе "Прочие вопросы по PHP", создана пользователем sound, 17 окт 2007.

  1. sound

    sound Guest

    есть таблица примерно такого вида
    то есть полный беспорядок новая ячейка <td></td> может начинаться в той же строке может начинаться с новой строки
    HTML:
    1. <tr><td>111</td>
    2. <td>222</td><td>333</td>
    3. <td>444</td>
    4. </tr><tr><td>111</td>
    5. <td>222</td><td>333</td><td>444</td>
    6. </tr></</table>

    каждую ячейку <td></td> в строке <tr></tr> надо записать в отдельное поле базы данных
    после того как строка заканчиваеться </tr> надо начинать новую запись в БД

    как можно ее экспортировать в MySq?
    может есть какие то специальные средства для экспорта html таблиц ??
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Если документ валидный XHTML, то можешь попробовать распарсить его как XML.
     
  3. sound

    sound Guest

    Sergey89
    нет это обычный html
     
  4. sound

    sound Guest

    на javascript нашел решение
    с помощью этой функции можно переместиться в нужный тег <td></td> и получить его содержимое

    var table=document.getElementsByTagName('table');
    var val=table[1].document.getElementsByTagName('td')[1].innerHTML;

    я только незнаю как сосчитать количество строк <tr></tr> в таблице

    Есть что то похожее на php?
     
  5. eduha

    eduha Активный пользователь

    С нами с:
    8 ноя 2006
    Сообщения:
    278
    Симпатии:
    0
    Адрес:
    Караганда
    Регулярные выражения.

    PHP:
    1. <?php
    2. print substr_count( '<tr', strtolower( $text ) );
    3. ?>
     
  6. sound

    sound Guest

    eduha
    какие именно регулярные выражения
    сижу перебираю пока ничего не подходит
     
  7. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Например такие регулярные выражения:
    Код (Text):
    1. preg_match_all('/<td>([\d]+)<\/td>/i', $text, $match);
    2. print_r(match);
    :)
     
  8. sound

    sound Guest

    lexa
    PHP:
    1. <?
    2. preg_match_all('/<td>([\w\s\d]*)<\/td>/i', $text, $match, PREG_SET_ORDER);
    3.  
    как сделать чтобы в массив $match

    строки разделялись<tr></tr>

    да и если в <td></td> есть символ + то вся запись пропускаеться
    как сделать чтобы любые символы не пропускались даже пустые
    ([\w\s\d]*) неподходит
     
  9. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. <?php
    2. $data = <<<HTML
    3. <table>
    4. <tr><td>111</td>
    5. <td>222</td><td>333</td>
    6. <td>444</td>
    7. </tr><tr><td>111</td>
    8. <td>222</td><td>333</td><td>444</td>
    9. </tr>
    10. </table>
    11. HTML;
    12.  
    13. foreach (explode("</tr><tr>", $data) as $tr) {
    14.     preg_match_all("#<td>(.*)</td>#Usi", $tr, $td, PREG_SET_ORDER);
    15.     print_r($td);
    16. }
     
  10. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Код (Text):
    1. $text = ' <table>
    2.  <tr><td>111</td>
    3.  <td>222</td><td>333</td>
    4.  <td>444</td><td></td>
    5.  </tr><tr><td>aaa</td>
    6.  <td>bbb</td><td>ccc</td><td>vvv</td>
    7.  </tr></table>';
    8.  
    9. foreach (explode('<tr>', $text) as $v)
    10.     if (preg_match_all('/<td>(.*?)<\/td>/', $v, $match))
    11.         $array[] = $match[1];
    12.        
    13. print_r($array);
    На выходе даст:
    Массив $array[0] содержит td из первого tr, $array[1] - из второго. Ну, а дальше сделай цикл по этому ($array) массиву и забивай в базу.

    Если я правильно тебя понял.
     
  11. sound

    sound Guest

    Sergey89
    у меня твой код по tr не разделяет массив

    lexa
    все ок работает спасибо

    вот код с исключением первой строки таблицы где просто загаловки

    PHP:
    1. foreach (explode('<tr>', $text) as $v)
    2.     if (preg_match_all('/<td>(.*?)<\/td>/', $v, $match))
    3.         $array[] = $match[1];
    4. <?
    5. foreach ($array as $key => $trr)
    6. if ($key==0){}
    7. else {
    8. {?><br /><?
    9. foreach ($trr as $array)
    10. {
    11. echo $array;?><br /><?
    12. } }
    13. }
    14. ?>
     
  12. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    А, ну да. $array[0] это заголовки в таблицах, но они обычно пишутся как <th>, а не <td>. Поэтому пиши, как тебе удобнее и исходя из того, какой код предпологается пропарсить. В данном случае - $array[0] это заголовки.

    З.Ы. Имхо, тут удобнее использовать for, а не foreach:
    Код (Text):
    1. for ($i = 1, $c = count($array); $i < $c; $i++) // $i = 1, потому что 0 это заголовки
    2.     foreach ($array[$i] as $td)
    3.         echo $td.'<br />';
     
  13. sound

    sound Guest

    lexa
    да ладно уже, там большой скрипт написал занос в базу обработака ошибок лезть больше не хочу
    кто ж знал что count($array); можно посчитать элементы массива и использоват любимый цикл for :)