Forum Webscript.Ru
Программирование => PHP => Тема начата: Settt от 17 Мая 2005, 13:20:25
-
Здравствуйте. У меня такой вопрос:
У меня есть файл с текстом, мне нужно
1. Взять отуда каждое предложение или фразу,
2. Проверить встречается ли там слово "which",
3. Если да то записать это предложение в отдельный файл.
Подскажите пожалуйста хотя бы ответ на 1 пункт. Думаю что надо использовать fgets, но я не знаю заранее длину предложения. Пробовал с fgetc но не знаю как сделать проверку на слово.
В принципе понимаю что схема такова - записать строку, используя как конец строки точку (это я сделал с помощью fgetc), а потом проверить есть ли там нужное слово. И так далее.
Заранее спасибо.
-
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].
-
а preg_match-то зачем?
чем strpos обычный не угодил?
и разбивать на предложения лучше, всё-таки, не по ".", а по ". "
если под словом "фраза" имелось в виду "набор символов, оканчивающийся точкой"
-
RomikChef:
и разбивать на предложения лучше, всё-таки, не по ".", а по ". "
Если предложение последние в абзаце, то ". " может и не прокатить, в виду возможного наличия ".\\n".
-
Спасибо, все работает. Я тоже в начале explode пробовал но ставил как разделитель символ пробела почему-то. Спасибо что наставили на путь истинный =) Но тут возник еще вопросик :
дело в том что слова потом будут сравниватся со словами из БД, а тут в файле слова с запятыми и другими знаками пунктуации. Нельзя ли как нибудь, прежде чем записать текст в файл, удалить из него все запятые? Подскажите пожалуйста если не трудно.
-
Settt:
Нельзя ли как нибудь, прежде чем записать текст в файл, удалить из него все запятые?
Можно. [P]preg_replace[/P]
-
Огромное спасибо.
-
Доброе время суток!
У меня похожий вопрос. Дело в том что у меня после редактирования новости в конце появляется лишний сепаратор (разделитель), что вобщем то не критично но влечет за собой косячки :)
Попробывал перед записью в файл после редактирования проверить на повторяющиеся разделители через 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;
?>
-
himera
Попрбуйте выводить могучей ф-цией print() то, что кладете в файл. На всех этапах обработки строки. Уверен, что сами найдете ошибку.
-
implode вместо foreach
-
Всем огромное спасибо!
Разобрался! :)