Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Строки с определённым словом из txt-файлов 
V
    Опции темы
splogger
Дата 24.1.2008, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.1.2008

Репутация: нет
Всего: нет



Господа, помогите плиз.

Есть /папка/ со множеством различных txt-файлов (с разными именами), в каждом файле разные строки. Как вытянуть из всех этих файлов только те строчки которые содержат отпределённое слово, независимо от его положения в строке и регистра?

Например, задаём слово "help", и скрипт тянет строки только с ним:

"i need your help" - нужная строка
"your help needed" - нужная строка
"how do you do" - не нужная строка
"it is ok" - не нужная строка

Т.е. скрипт должен парсить все файлы и все строчки на предмет наличия в них этого слова. И выводить эти строчки.
Спасибо!

Это сообщение отредактировал(а) splogger - 24.1.2008, 20:51
PM MAIL   Вверх
GeneralElectric
Дата 24.1.2008, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 0
Всего: 16



вытягивать-то, наверное, все строчки.
а использовать - только те, в которых нашли искомое слово
PM MAIL   Вверх
MoLeX
Дата 25.1.2008, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: нет
Всего: 140



если не ошибаюсь то можно сделать так

Проверка соответствия слова шаблону с учетом регистра
Код

if(ereg("слово", "это слово тут встречается"))
{
    echo "строка подходит";
}
else
{
    echo "строка неподходит";
}


Проверка соответствия слова шаблону без учета регистра
Код

if(eregi("слово", "это CлOвo тут встречается"))
{
    echo "строка подходит";
}
else
{
    echo "строка неподходит";
}



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
flashaa
Дата 25.1.2008, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



Думаю, что-то типа такого:
Код

$res = array(); // массив, который будет хранить результирующие строки

foreach(glob('папка/*.txt') as $filename) { // получаем имена всех нужных нам файлов

$rows = file($filename); // получаем массив строк файла
$rows = preg_grep('/cлово/', $rows); // получаем только строки, содержащие нужное слово

$res = $res + $rows; // присоединяем к результирующему массиву строк

}
а теперь вывод этих строк:
print_r($res);

На счет правильности не уверен, на счет оптимальности - тоже. Но уж больно хорошо использованные ф-ции подходят под поставленную задачу.
PM MAIL   Вверх
smartov
Дата 25.1.2008, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 4
Всего: 259



splogger
а что сложного то? С чем возникли траблы?
В утрированном варианте, если по-быстрячку то можно так
Код


$needle = 'help';

$files = array();

#берем список файлов txt из директории
$d = dir("/etc/php5");
while (false !== ($entry = $d->read())) {
    if ($entry == '.' || $entry == '..' || !is_readable($entry) || !preg_match('/\.txt$/', $entry)) {
        continue;
    }
    files[] = array('filename' => $entry);
}
$d->close();

#ищем вхождения
foreach ($files as $i => $file) {
    $content = file($file['filename']);

    #если находим вхождения - складываем к файлам
    foreach ($content as $line) {
        if (mb_strpos($line, $needle) !== false) { //можно использовать mb_stripos или preg_math или ereg
            $files[$i]['lines_found'][] = $line;
        }
    }

    #удаляем из найденных файлы без вхождений
    if (!@$files[$i]['lines_found']) {
        unset($files[$i]);
    }

}

print_r($files);


Писал не проверяя.

Это сообщение отредактировал(а) smartov - 25.1.2008, 10:38
PM MAIL   Вверх
splogger
Дата 25.1.2008, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.1.2008

Репутация: нет
Всего: нет



парни, спасибо! 
выручили реально  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0753 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.