Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сравнение строки с остальными строками файла

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
seowin
Отправлено: 12 Сентября, 2015 - 15:32:20
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Апр. 2015  


Помог: 0 раз(а)




Задача следующая. Есть txt файл формата:
красивый|быстрый|смелый
хорошой|пестрый|длинный
бледный|красныцй|ярый|беглый
смелый|настоящий|кран
бледный|красныцй|ярый|беглый
румяный|пестрый|яростный

Нужно сравнивать слова из каждой строчки со всем файлом и в случае нахождения слова в другой строке, добавить эту строку(строки) к текущей проверяемой. Далее сохранить эту строку в новый файл.

Т.е. как мы видим, некоторые слова могут встречаться в других строках. Например, вот 2 строки:
красивый|быстрый|смелый
смелый|настоящий|кран

Здесь, как мы видим, встречается одинаковое слово "смелый".
Скрипт должен соединить эти строки так: "красивый|быстрый|смелый|смелый|настоящий|кран" и записать в новый файл.

Слова в новом файле в разных строках повторяться не должны.

Т.е. релузьтатом работы скрипта в данном случае был бы файл с таким содержанием:

красивый|быстрый|смелый|смелый|настоящий|кран
хорошой|пестрый|длинный|румяный|пестрый|яростный
бледный|красныцй|ярый|беглый
грустный|веселый|большой

Пробовал и так и сяк. Не доходит, как это реализовать.

Остановился на таком варианте, но он тоже неверно работает:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.  
  4. $file = file("1.txt"); // Открываем первый файл и заносим из него все строки в массив
  5. $file3 = "3.txt";
  6. $proverka = file_get_contents("3.txt");
  7.  
  8.  
  9. //Запись в файл
  10. function add_to_file($string)
  11. {
  12.         global $file3;
  13.         $res = fopen($file3,'a');
  14.         $try = fwrite($res, $string);
  15.         if (!$try) {echo 'Ошибка! Не могу записать в файл: '.$file3."\n";}
  16. }
  17.  
  18. $line_pattern = "";
  19.    
  20.     foreach ($file as $line)
  21.     {
  22.  
  23.                 $line = trim($line);
  24.                 $pattern = "/" . $line . "/i";                 
  25.        
  26.         //Проверяем, есть ли в файле результата вхождение одного из слова
  27.         if(!preg_match($pattern, $proverka)) {
  28.        
  29.         for($i = 1; $i < count($file); $i++)
  30.         {
  31.                 if(preg_match($pattern, $file[$i])) {
  32.                         $arr_vibor = array_slice($file, $i, 1);
  33.                         $line .= "|" . $arr_vibor[0];
  34.                 }      
  35.         }
  36.        
  37.                 add_to_file($line);
  38.        
  39.         }
  40.         }
  41.  
  42.        
  43. ?>
  44.  

Буду очень благодарен за помощь!
 
 Top
DeepVarvar Супермодератор
Отправлено: 12 Сентября, 2015 - 22:11:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Не точная или некорректная постановка задачи.
Для данных вида:
CODE (txt):
скопировать код в буфер обмена
  1. красивый|быстрый|смелый
  2. хорошой|быстрый|длинный
  3. бледный|длинный|ярый|хорошой

Будет вот такой результат:
CODE (txt):
скопировать код в буфер обмена
  1. красивый|быстрый|смелый|хорошой|быстрый|длинный
  2. хорошой|быстрый|длинный|бледный|длинный|ярый|хорошой

Что является UB (Undefined Behaviour) или требует повторного прохода (а для более сложных данных и большего кол-ва проходов) для нормализации результатов.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB