Forum Webscript.Ru

Программирование => PHP => Тема начата: Settt от 17 Мая 2005, 13:20:25

Название: Как извлечь строку из файла?
Отправлено: Settt от 17 Мая 2005, 13:20:25
Здравствуйте. У меня такой вопрос:
У меня есть файл с текстом, мне нужно
1. Взять отуда каждое предложение или фразу,
2. Проверить встречается ли там слово "which",
3. Если да то записать это предложение в отдельный файл.

Подскажите пожалуйста хотя бы ответ на 1 пункт. Думаю что надо использовать fgets, но я не знаю заранее длину предложения. Пробовал с fgetc но не знаю как сделать проверку на слово.
В принципе понимаю что схема такова - записать строку, используя как конец строки точку (это я сделал с помощью fgetc), а потом проверить есть ли там нужное слово. И так далее.
Заранее спасибо.
Название: Как извлечь строку из файла?
Отправлено: Croaker от 17 Мая 2005, 13:49:49
Settt
Самое превое, что приходит в голову:


// читаем файл в строку
$content = file_get_contents("file.txt");

// получаем все предложения в виде массива, исходя из логики, что все предложения разделены точкой:
$sentences = explode(".", $content);

// для каждого продложения (элемента массива) проверяем вхождение "which"
foreach ($sentences as $sentence) {
    if ( preg_match("/which/", $sentence) ) {
     // пишем предложение ($sentence) в файл.
    }
}



Собственно все сводится к [P]file_get_contents[/P], [P]explode[/P] и [P]preg_match[/P].
Название: Как извлечь строку из файла?
Отправлено: Меняздесьдавнонет от 17 Мая 2005, 14:10:41
а preg_match-то зачем?
чем strpos обычный не угодил?
и разбивать на предложения лучше, всё-таки, не по ".", а по ". "
если под словом "фраза" имелось в виду "набор символов, оканчивающийся точкой"
Название: Как извлечь строку из файла?
Отправлено: Croaker от 17 Мая 2005, 14:39:07
Цитировать
RomikChef:
и разбивать на предложения лучше, всё-таки, не по ".", а по ". "


Если предложение последние в абзаце, то ". " может и не прокатить, в виду возможного наличия ".\\n".
Название: Как извлечь строку из файла?
Отправлено: Settt от 17 Мая 2005, 20:18:11
Спасибо, все работает. Я тоже в начале explode пробовал но ставил как разделитель символ пробела почему-то. Спасибо что наставили на путь истинный =) Но тут возник еще вопросик :
дело в том что слова потом будут сравниватся со словами из БД, а тут в файле слова с запятыми и другими знаками пунктуации. Нельзя ли как нибудь, прежде чем записать текст в файл, удалить из него все запятые? Подскажите пожалуйста если не трудно.
Название: Как извлечь строку из файла?
Отправлено: Croaker от 17 Мая 2005, 22:10:15
Цитировать
Settt:
Нельзя ли как нибудь, прежде чем записать текст в файл, удалить из него все запятые?


Можно. [P]preg_replace[/P]
Название: Как извлечь строку из файла?
Отправлено: Settt от 18 Мая 2005, 01:09:52
Огромное спасибо.
Название: Как извлечь строку из файла?
Отправлено: himera от 06 Июня 2005, 18:22:45
Доброе время суток!
У меня похожий вопрос. Дело в том что у меня после редактирования новости в конце появляется лишний сепаратор (разделитель), что вобщем то не критично но влечет за собой косячки :)
Попробывал перед записью в файл после редактирования проверить на повторяющиеся разделители через str_replace
но что видимо напутал :( не получилось. Очень надеюсь на помощь!
вот собсно код:

// Определяем сепаратор, по которому будут делиться новости в файле
$separator = "[n]";

// Берем переменную новостей из _POST
$content = ( !empty($_POST[\'edit_news\']) ? $_POST[\'edit_news\'] : NULL );

// Если переменной нету
if($content === NULL) die(\'netu peremennoy\');

// Если переменная - не массив
if(!is_array($_POST[\'edit_news\'])) die("Ожидается массив");

// Инициализируем имя файла новостей
$file_name = "../news/news.txt";

// Открываем файл новостей для записи
if(!$fp = fopen($file_name,"w")) die("Не получается открыть файл новостей");

// Перебираем по кускам и записываем в файл, разделяя сепараторами
foreach($content as $current_news) {

        $current_news = str_replace("[n][n]", "[n]", $current_news); //тут я проверяю повтор сепаратора
        fputs($fp,$current_news . $separator);    
 }
// Закрываем файл
fclose($fp);
exit;
?>
Название: Как извлечь строку из файла?
Отправлено: Croaker от 06 Июня 2005, 18:28:29
himera
Попрбуйте выводить могучей ф-цией print() то, что кладете в файл. На всех этапах обработки строки. Уверен, что сами найдете ошибку.
Название: Как извлечь строку из файла?
Отправлено: Меняздесьдавнонет от 06 Июня 2005, 18:49:20
implode вместо foreach
Название: Как извлечь строку из файла?
Отправлено: himera от 07 Июня 2005, 19:30:11
Всем огромное спасибо!
Разобрался! :)