[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск неизвестных переменных в файле
alex25_06
Доброго времени суток уважаемые форумчане.
Я как и все новички наткнулся на нерешаемую задачу.
Есть файл html, из него нужно вырвать нужный текст.
Приведу пример, станет более понятно:
вот есть такой вот файл
<table cellspacing='1' cellpadding='1' width='100%' border='0' bgcolor='#FFFFFF' class='qweqwe'>
<tr>
<td
width='60' style='padding-left: 10px;'>
<a
href='http://сайт.ru/89006280'><br><img src='http://сайт.com/89006280/30714f7.jpg'/><br/>Имя</a>
</td>
<td
width='90' style='padding-left: 10px;'><small>28.12.2010 in 21:30</small></td><td style='padding-left: 10px;'>Текст</td>
</tr>

<tr
class='light'>
<td
width='60' style='padding-left: 10px;'>
<a
href='http://сайт.ru/118451197'><br><img src='http://сайт.com/118451197/1726620.jpg'/><br/>Имя2</a>
</td>
<td
width='90' style='padding-left: 10px;'><small>28.12.2010 in 21:39</small></td><td style='padding-left: 10px;'>Текст2</td>
</tr>
</table>

мне нужно в этом тексте найти и записать в переменные:
сайт.ru/89006280
сайт.com/89006280/30714f7.jpg
Имя
28.12.2010 21:30
Текст

и второй кусок (их может быть 1000 в одном файле)

сайт.ru/118451197
сайт.com/118451197/1726620.jpg
Имя2
28.12.2010 21:39
Текст2

мой мозг смог забрать только первую строчку из этого файла вот таким скриптом:
$dirname = "3";
scan_dir($dirname); // Вызов рекурсивной функции
function scan_dir($dirname)
{// Открываем текущую директорию
$dir = opendir($dirname); // Читаем в цикле директорию
while (($file = readdir($dir)) !== false)
{
// Если файл обрабатываем его содержимое
if($file != "." && $file != "..")
{
// Если имеем дело с файлом - производим в нём замену
if(is_file($dirname."/".$file))
{
// Читаем содержимое файла
$content = file_get_contents($dirname."/".$file);
// разделяем весь файл на два куска, далее тот кусок следующий опять на два и так далее
list($trans, $gb) = explode("<table cellspacing='1' cellpadding='1' width='100%' border='0' bgcolor='#FFFFFF' class='qweqwe'><tr class='light'><td width='60' style='padding-left: 10px;'><a href='", $content);
list($trans2, $gb2) = explode("'><br><img src='", $gb);
list($trans3, $gb3) = explode("'/><br/>", $gb2);
list($trans4, $gb4) = explode("</a></td><td width='90' style='padding-left: 10px;'><small>", $gb3);
list($trans5, $gb5) = explode(" in ", $gb4);
list($trans6, $gb6) = explode("</small></td><td style='padding-left: 10px;'>", $gb5);
list($trans7, $gb7) = explode("</td></tr><tr><td width='60' style='padding-left: 10px;'><a href='", $gb6);
echo "$trans2<br>
$trans3<br>
$trans4<br>
$trans5<br>
$trans6<br>
$trans7<br>
"
;
}}}closedir($dir);}

в итоге если в директории один файл то получу на экране это:
сайт.ru/89006280
сайт.com/89006280/30714f7.jpg
Имя
28.12.2010 21:30
Текст

как сделать так, чтоб он весь файл проверил?
то есть чтобы продолжил в том же духе? или может есть какие более легкие способы найти нужный текст в файле
Помогите, я уже почти неделю ваюю.



Спустя 9 минут, 6 секунд (9.06.2011 - 22:38) Invis1ble написал(а):
alex25_06
Цитата
или может есть какие более легкие способы найти нужный текст в файле

Конечно есть. Я бы порекомендовал тебе ознакомиться с регулярными выржениями и функциями для работы с ними. Копай в сторону preg_match().
Есть второй вариант - работать через объект DOMDocument, но я предпочитаю все же регулярки, т.к. они гибче, да и вообще, если хочешь научиться программировать - без них никуда.

Спустя 1 час, 6 минут, 9 секунд (9.06.2011 - 23:44) alex25_06 написал(а):
сейчас буду читать, учиться и пробовать, результаты отпишу сюда
большое спасибо
может на примере кто покажет как?

Спустя 1 час, 42 минуты, 7 секунд (10.06.2011 - 01:27) walerus написал(а):
Если конкретно по этому примеру, то
preg_match_all("~<a href='(.*)'><br><img src='(.*)'/><br/>(.*)</a>~iUs", $content, $match); // Так получишь URL, URL картинки, Имя
print_r($match);

preg_match_all("~<td width='90' style='padding-left: 10px;'><small>(.*)</small></td><td style='padding-left: 10px;'>(.*)</td>~iUs", $content, $match_2); // 2й кусок
print_r($match_2);

Спустя 16 часов, 40 минут, 22 секунды (10.06.2011 - 18:07) alex25_06 написал(а):
мужики спасибо, я за ночь точно так же сделал :) только все в одну строчку
вот так

$dirname = "3";
scan_dir($dirname); // Вызов рекурсивной функции
function scan_dir($dirname)
{// Открываем текущую директорию
$dir = opendir($dirname); // Читаем в цикле директорию
while (($file = readdir($dir)) !== false)
{
// Если файл обрабатываем его содержимое
if($file != "." && $file != "..")
{
// Если имеем дело с файлом - производим в нём замену
if(is_file($dirname."/".$file))
{
// Читаем содержимое файла
$content = file_get_contents($dirname."/".$file);

$search = "~<a href='(.*)'><br><img src='(.*)'/><br/>(.*)</a></td><td width='90' style='padding-left: 10px;'><small>(.*)</small></td><td style='padding-left: 10px;'>(.*)</td></tr>~iUs";
$n = preg_match_all($search, $content, $result);
print_r($result);
}}}closedir($dir);}

данный код выводит следующее
Array
(
[
0] => Array
(
[
0] => <a href='http://сайт.ru/89006280'><br><img src='http://сайт.com/89006280/30714f7.jpg'/><br/>Имя</a></td><td width='90' style='padding-left: 10px;'><small>28.12.2010 in 21:30</small></td><td style='padding-left: 10px;'>Текст</td></tr>
[
1] => <a href='http://сайт.ru/118451197'><br><img src='http://сайт.com/118451197/1726620.jpg'/><br/>Имя2</a></td><td width='90' style='padding-left: 10px;'><small>28.12.2010 in 21:39</small></td><td style='padding-left: 10px;'>Текст2</td></tr>
)

[
1] => Array
(
[
0] => http://сайт.ru/89006280
[1] => http://сайт.ru/118451197
)

[
2] => Array
(
[
0] => http://сайт.com/89006280/30714f7.jpg
[1] => http://сайт.com/118451197/1726620.jpg
)

[
3] => Array
(
[
0] => Имя
[1] => Имя2
)

[
4] => Array
(
[
0] => 28.12.2010 in 21:30
[1] => 28.12.2010 in 21:39
)

[
5] => Array
(
[
0] => Текст
[1] => Текст2
)

)


опять загвоздка, как теперь каждую строку поместить в переменную, например
$text = "Текст";
мне сейчас обработанную инфу нужно запихнуть в базу, но для этого эти ореи разобрать надо, подскажите как?

Спустя 25 минут, 11 секунд (10.06.2011 - 18:32) walerus написал(а):
Ну иди по массиву... зная что

array[0] = вся найденная строка
array[1] = содержит ссылки
array[2] = содержит ссылки на картинки
array[3] = содержит имена
array[4] = содержит дату
array[5] = содержит текст...

и выдергивай синхронно...

array[0][0]
array[1][0]
array[2][0]
array[3][0]
array[4][0]
array[5][0]

это все данные по первой строке


array[0][1]
array[1][1]
array[2][1]
array[3][1]
array[4][1]
array[5][1]

это все данные по второй строке

и так далее

Спустя 19 минут, 59 секунд (10.06.2011 - 18:52) alex25_06 написал(а):
с этими массивами ничего не понимаю вообще sad.gif
какой код был бы рабочим?
а если таких строк будет тысячи?
бля уже часов пять читаю ничего не шарю в массивах вообще

Спустя 3 часа, 41 минута, 35 секунд (10.06.2011 - 22:34) Invis1ble написал(а):
alex25_06
Зачем тебе переменные? Работай с массивами, не делай лишних операций.
Цитата
ничего не шарю в массивах вообще

Это печально... Это ведь азы, учись товарищ!
Цитата
а если таких строк будет тысячи?

Очень просто - например используешь цикл foreach().

Спустя 1 час, 6 минут, 37 секунд (10.06.2011 - 23:40) walerus написал(а):
Массивы - наше все ! ))) и по теме...
Цитата
мне нужно в этом тексте найти и записать в переменные:


а как в переменных будет храниться инфа? - пример приведи )))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.