Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: HTML в XLS (продолжение)
 
 автор: Dima1999   (14.09.2005 в 15:23)   письмо автору
 
 

...продолжая тему http://softtime.ru/forum/read.php?id_forum=1&id_theme=7350&page=1

<table style="font:11px Verdana,Arial,Helvetica;width:100%">
  <tbody>
  <tr><td width="100%" valign=top><br>
  <table style="font:11px Verdana,Arial,Helvetica" bgcolor="#CCCCCC" cellspacing=1 cellpadding=4 width="90%" align=center>
    <tbody>
    <tr bgcolor="white">
    <td align=center>Номер:</td>
    <td align=center>Фамилия</td>
    <td align=center>Имя:</td>
    <td align=center>Паспорт (св-во о рождении):</td>
    <td align=center>Город, страна:</td>
    <td align=center>Дата рождения:</td>
    <td align=center>Рейтинг:</td>
    <td align=center>Организация, тренер</td>
    <td align=center>Виза врача:</td>
    <td></td></tr>

    <tr bgcolor="white"><td>1</td>
    <td>Иванов</td>
    <td>Иван</td><td>4002123456</td>
    <td>Питер, Россия</td>
    <td>02/01/2005</td>
    <td>111</td>
    <td>ДЮСШ1</td>
    <td>нет</td>
    <form method=POST action="form_online.php?step=5"><td>
    <input type=hidden name=number value='1'><input type=submit value="Изменить"></td></form></tr>

    <tr bgcolor="white">
    <td>2</td>
    <td>Петров</td>
    <td>Петр</td>
    <td>4002123456</td>
    <td>Питер, Россия</td>
    <td>22/04/1983</td>
    <td>122</td>
    <td>ДЮСШ1</td>
    <td>есть</td>
    <form method=POST action="form_online.php?step=5"><td>
    <input type=hidden name=number value='2'><input type=submit value="Изменить"></td></form></tr>

    <tr bgcolor="white">
    <td>3</td><td>Сидоров</td>
    <td>Сидор</td><td>4002123456</td>
    <td>Питер, Россия</td>
    <td>21/03/1985</td>
    <td>123</td>
    <td>ДЮСШ1</td>
    <td>нет</td>
    <form method=POST action="form_online.php?step=5"><td>
    <input type=hidden name=number value='3'><input type=submit value="Изменить"></td></form></tr>

    <tr bgcolor="white">
    <td colspan=3>Контактное лицо</td>
    <td colspan=6>Самедов Артем Петрович</td>
    <form method=POST action="form_online.php?step=5"><td>
    <input type=hidden name=man value='contactable'><input type=submit value="Изменить"></td></form></tr>

    <tr bgcolor="white">
    <td colspan=3>Ответственное лицо</td>
    <td colspan=6>Чемоданов Артем Арсеньевич</td>
    <form method=POST action="form_online.php?step=5"><td>
    <input type=hidden name=man value='responsible'><input type=submit value="Изменить"></td></form></tr>

    </tbody>
  </table>
  <br></td>
  </tr>
  </tbody>
</table>


Это просто таблица. В предыдущей теме говорилось, что ее можно перевести в CSV-вид с помощью рег. выражений.

   
 
 автор: cheops   (14.09.2005 в 21:07)   письмо автору
 
   для: Dima1999   (14.09.2005 в 15:23)
 

Хм... а нет возможности сделать файл более формальным - т.е. чтобы число столбцов везде было одинаковым? Пока плохо получается вытащить данные
<?php
  $content 
file_get_contents("opr000JR.htm");
  
$pattern "|<tr[^>]*>[^<]*<(td[^>]*>([^<]+)<[^<]*<[^>]*){1,2}|iU";
  
preg_match_all($pattern,$content,$out);
  echo 
"<pre>";
  
print_r($out);
  echo 
"</pre>";
?>

   
 
 автор: Dima1999   (14.09.2005 в 21:41)   письмо автору
 
   для: cheops   (14.09.2005 в 21:07)
 

> $content = file_get_contents("opr000JR.htm");
таблица пишется в PHP-файле и берется из БД (т.е. нет такого файла "opr000JR.htm")
> а нет возможности сделать файл более формальным - т.е. чтобы число столбцов везде было одинаковым?
Скорее всего нет. Точно =(

   
 
 автор: Dima1999   (16.09.2005 в 09:23)   письмо автору
 
   для: Dima1999   (14.09.2005 в 21:41)
 

Где все???!!!!

   
 
 автор: cheops   (16.09.2005 в 13:54)   письмо автору
 
   для: Dima1999   (16.09.2005 в 09:23)
 

Я сейчас убегаю не успеваю до ума довести скрипт - будем в два этапа резать сначала на массив подстрок, расположенных между <tr> и </tr>, а затем разбирать их
<?php 
  $content 
file_get_contents("opr000JR.htm"); 
  
$str_begin 0;
  
$str_end 0;
  while(
true)
  {
    
$str_begin strpos($content'<tr'$str_end);
    if(
$str_begin == 0) break;
    
$str_end strpos($content'</tr'$str_begin);
    
$tr[] = substr($content$str_begin$str_end $str_begin);
    echo 
"$str_begin<br>";
    echo 
"$str_end<br>";
  }
  echo 
"<pre>"
  
print_r($tr); 
  echo 
"</pre>"
?>

С регулярным выражением вечером продолжим. opr000JR.htm - это я просто для теста взял, потом вместо $content подставите значение из базы данных.

   
 
 автор: cheops   (16.09.2005 в 19:57)   письмо автору
 
   для: cheops   (16.09.2005 в 13:54)
 

Вот конечный вариант
<?php 
  $content 
file_get_contents("opr000JR.htm"); 
  
$str_begin 0;
  
$str_end 0;
  while(
true)
  {
    
$str_begin strpos($content'<tr'$str_end);
    if(
$str_begin == 0) break;
    
$str_end strpos($content'</tr'$str_begin);
    
$tr[] = substr($content$str_begin$str_end $str_begin);
  }
  foreach(
$tr as $line)
  {
    
preg_match_all("|<td[^>]*>(.+)</td|iU",$line,$out);
    
$text "";
    foreach(
$out[1] as $value$text .= $value.";";
    
$file[] = $text;
  }
  
$content implode("\r\n",$file);
  echo 
$content;
?>

HTML-данные поступают в переменной $content и в результате содержимое CSV-файла также возвращается в виде переменной $content.

   
 
 автор: Dima1999   (16.09.2005 в 21:32)   письмо автору
 
   для: cheops   (16.09.2005 в 19:57)
 

А куда же делись хэдеры?

   
 
 автор: cheops   (16.09.2005 в 21:48)   письмо автору
 
   для: Dima1999   (16.09.2005 в 21:32)
 

Хм... так а вроде остались... я у себя в результате первой строкой наблюдаю
Номер:;Фамилия;Имя:;Паспорт (св-во о рождении):;Город, страна:;Дата рождения:;Рейтинг:;Организация, тренер;Виза врача:;

   
 
 автор: Dima1999   (16.09.2005 в 21:55)   письмо автору
 
   для: cheops   (16.09.2005 в 21:48)
 

Нет, я имею в виду, что сперва было

<?
header
(".....attachment......");
header(.......итд..................)
echo 
$text;
?>
в результирующем файле, на который была ссылка. В новом коде этого ничего нет. Куда это вписывать?

   
 
 автор: cheops   (16.09.2005 в 22:18)   письмо автору
 
   для: Dima1999   (16.09.2005 в 21:55)
 

А заголовки следует поместить в самое начало
<?php
  header
(".....attachment......"); 
  
header(.......итд..................);
?>

а приведённый выше код следует поместить вместо оператора
<?php
  
echo $text;
?>

   
 
 автор: Dima1999   (17.09.2005 в 00:18)   письмо автору
 
   для: cheops   (16.09.2005 в 22:18)
 

Спасибо за все докиды. Завтра буду пробовать.

   
 
 автор: Dima1999   (17.09.2005 в 09:30)   письмо автору
 
   для: Dima1999   (17.09.2005 в 00:18)
 

Такие вопросы:

1) >opr000JR.htm - это я просто для теста взял, потом вместо $content подставите значение из базы данных.
Что значит подставлю вместо контент значение из БД? Не понял.
2) Если я добалю в таблицу несколько строк (тоже с колспанами), будет ли работать приведнный выше код?

   
 
 автор: napTu3aH   (17.09.2005 в 11:07)   письмо автору
 
   для: Dima1999   (17.09.2005 в 09:30)
 

>Что значит подставлю вместо контент значение из БД? Не понял.
вместо opr000JR.htm пишите файл который вы хотите перевести в CSV формат

   
 
 автор: cheops   (17.09.2005 в 13:32)   письмо автору
 
   для: Dima1999   (17.09.2005 в 09:30)
 

1) Как вы выводите HTML-файлы в браузер?
2) Да

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования