Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Поиск в csv и вывод строк

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

arov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Сразу скажу это мое первое знакомство с PHP, не ругайте сильно
 
Дано: файл csv следующего содержания
 
Агентский договор 1234 1.10.2009 21.10.2009 ООО Рога ЭНД Копыта Описание договора <a href="A_334_21_10_2009_21_10_2009" target="_blank">Просмотр</a>    
Договор 6547 2.05.2009 20.09.2009 Мастер ломастер Ломает все и бесплатно <a href="A_334_21_10_2009_21_10_2009" target="_blank">Просмотр</a>    
Соглашение 3332 01.02.2008 06.05.2009 ООО Камень  Купля продажа <a href="A_334_21_10_2009_21_10_2009" target="_blank">Просмотр</a>

 
Надо: Организовать поиск по всем строкам и столбцам, и выводить все строки где встречается искомое выражение, например если ввести "дог" то чтоб выводились все Договора.
Агентский договор 1234 1.10.2009 21.10.2009 ООО Рога ЭНД Копыта Описание договора <a href="A_334_21_10_2009_21_10_2009" target="_blank">Просмотр</a>    
Договор 6547 2.05.2009 20.09.2009 Мастер ломастер Ломает все и бесплатно <a href="A_334_21_10_2009_21_10_2009" target="_blank">Просмотр</a>  

 
 
Делаю так:  
<?php
$row = 1;
$handle = fopen("base.csv", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)  
{
    $num = count($data);
    echo "<tr>\n";
    $row++;
    for ($i=0; $i < $num; $i++)  
    {
       if ($data[$i] == $search_txt)
       {  
       echo "<td>".$data[$i]."</td>\n";
       }
    }
    echo "</tr>\n";
}
fclose($handle);
?>
 
Но что то все не так у меня выходит. Направьте на путь истинный... плз

Всего записей: 187 | Зарегистр. 25-03-2005 | Отправлено: 17:45 21-10-2009 | Исправлено: arov, 17:47 21-10-2009
Mamay



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ну вообще-то для поиска подстроки в строке есть специальные функции, как то  
strstr или тот-же preg_match
 
Добавлено:
ну и после нахождения нужной строки и её вывода можно сделать break в цикле for

----------
Даже самый дурацкий замысел можно выполнить мастерски

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 18:21 21-10-2009
arov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Поиск сделал. Спасибо.
 
А как это брейкнуть? Если брейк сделать он же после первого нахождения выйдет из цикла. И еще, если брейком сделать, а искомое слово находится в последней части строки то не получится выводить данные идущие до этой части? (запутанно получилось, надеюсь поймете о чем я)  
если не трудно примеры кода плз...

Всего записей: 187 | Зарегистр. 25-03-2005 | Отправлено: 21:51 21-10-2009
arov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Может кому понадобится.
Вот решение вопроса
 
<?php
//$row = 1;
$handle = fopen("base.csv", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)  
{
    $num = count($data);
    echo "<tr>";
    $flag = false;
    for ($i=0; $i < $num; $i++)  
    {
       if(preg_match("/".$search_txt."/i", $data[$i], $matches))
       {
       $flag = true;  
       }
    }
    if($flag)
    {
    for ($j=0; $j < $num; $j++)
        echo "<td>".$data[$j]."</td>";
    }
    echo "</tr>\n";
}
fclose($handle);
?>

Всего записей: 187 | Зарегистр. 25-03-2005 | Отправлено: 11:55 22-10-2009
Mamay



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
блин, а так не проще ?

Код:
<?php
$handle = fopen("base.csv", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)  
{
    echo "<tr>";
    foreach ($data as $s) {
       if(preg_match("/".$search_txt."/i", $s, $matches)) {
            foreach ( $data as $v ) echo "<td>".$v."</td>";
            break;
       }
    }
    echo "</tr>\n";
}
fclose($handle);
?>

говнокодеры блин, постыдились бы херню всякую постить ...

----------
Даже самый дурацкий замысел можно выполнить мастерски

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 12:12 22-10-2009
arov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
может и проще, в самом начале я писал что в первые работаю с php, будьте толерантны и мир улыбнется Вам

Всего записей: 187 | Зарегистр. 25-03-2005 | Отправлено: 09:34 23-10-2009
Andrei287

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Извиняюсь за поднятие древней темы, может кто нибудь объяснить как правильно передать переменную для поиска по csv файлу скрипту который разместил Mamay, заранее всем благодарен!

Всего записей: 7 | Зарегистр. 01-05-2014 | Отправлено: 12:03 01-05-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrei287
переменная
Цитата:
$search_txt

но лучше так

Цитата:
preg_match("/" . preg_quote($search_txt) . "/i", $s, $matches)

 
или вообще искать функцией strpos, stripos

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:22 01-05-2014
Andrei287

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вроде работает, но почему-то поиск возможен только по числам, а мне необходимо по фамилии, первый столбец фамилия второй тоже текст, и почему-то когда переменная пустая выводит весь csv а это совсем не нужно, помогите пожалуста очень нужно заранее благодарен!

Всего записей: 7 | Зарегистр. 01-05-2014 | Отправлено: 21:13 01-05-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrei287

Цитата:
 и почему-то когда переменная пустая выводит весь csv а это совсем не нужно, помогите пожалуста очень нужно заранее благодарен!

ну так сделайте проверку и не делайте поиск, если пустая.
 
if (!empty($search_txt))
{
 
// тут весь код считывания из файла и поиска
 
}
 

Цитата:
но почему-то поиск возможен только по числам, а мне необходимо по фамилии, первый столбец фамилия второй тоже текст

наверно потому, что уникод. тогда регулярному выражению нужно сказать об этом
"/iu"

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:21 01-05-2014
Andrei287

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не могу разобраться, у меня слабо очень с php поправте как нужно пожалуйста вот код:
<?php  
if (isset($_POST['fio']));
$search_txt = $_POST['fio'];
 $handle = fopen("file.csv", "r");  
 while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)    
 {  
     echo "<tr>";  
     foreach ($data as $s) {  
        if(preg_match("/".$search_txt."/i", $s, $matches)) {  
             foreach ( $data as $v ) echo "<td>".$v."</td>";  
             break;  
        }  
     }  
     echo "</tr>\n";  
 }  
 fclose($handle);  
 ?>
 
ps: хотя тут вставляется куча лишних <tr></tr>, как видно из кода.

Всего записей: 7 | Зарегистр. 01-05-2014 | Отправлено: 21:29 01-05-2014 | Исправлено: Cheery, 21:32 01-05-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrei287
не нужно ожидать, что вам будут все приносить на блюдечке.
 
if (isset($_POST['fio']) && !empty($_POST['fio']))
{
 $search_txt = trim($_POST['fio']);  
 $handle = fopen("file.csv", "r");  
 while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)    
 {  
     echo "<tr>";  
     foreach ($data as $s) {  
        if(preg_match("/" . preg_quote($search_txt) . "/iu", $s, $matches)) {  
             foreach ( $data as $v ) echo "<td>".$v."</td>";  
             break;  
        }  
     }  
     echo "</tr>\n";  
 }  
 fclose($handle);  
}

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:31 01-05-2014 | Исправлено: Cheery, 21:52 01-05-2014
Andrei287

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо вам большое, но поиск почему-то не работает ошибка в 10 строке возникает когда  передаю переменную

Всего записей: 7 | Зарегистр. 01-05-2014 | Отправлено: 21:40 01-05-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrei287

Цитата:
Спасибо вам большое, но поиск почему-то не работает ошибка в 10 строке возникает когда  передаю переменную

что в 10 строке? сообщение об ошибке какое?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:45 01-05-2014 | Исправлено: Cheery, 21:46 01-05-2014
Andrei287

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В этой строке: if(preg_match("/" . preq_quote($search_txt) . "/iu", $s, $matches)){  
 
 
Fatal error: Call to undefined function preq_quote()

Всего записей: 7 | Зарегистр. 01-05-2014 | Отправлено: 21:51 01-05-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrei287
preg_quote, ну опечатка

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:52 01-05-2014
Andrei287

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
По фамилии не ищет выдаёт просто пустую страницу, работает только по цифрам , вот форма через которую передаю переменную:
 
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<form action="statys.php" method="post">
<table width="500">
<tbody>
<tr>
<td>Введите фамилию:</td>
<td><input style="width: 100%;" type="text" name="fio" /></td>
</tr>
 
<input type="submit" name="fio" value="Отправить запрос" /></td>
</tr>
</tbody>
</table>
</form>

Всего записей: 7 | Зарегистр. 01-05-2014 | Отправлено: 22:01 01-05-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrei287
значит кодировка в файле не совпадает. страница в 1251, содержимое csv, по видимому, в уникоде.
нужно преобразовывать получаемый текст из формы в уникод или изначально отображать страницу в уникоде.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:13 01-05-2014
Andrei287

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поменял кодировку csv на utf-8 и всё заработало, огромное вам спасибо и всего вам доброго!

Всего записей: 7 | Зарегистр. 01-05-2014 | Отправлено: 22:23 01-05-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Поиск в csv и вывод строк


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru