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]   

> Без описания
Bio man
Отправлено: 10 Апреля, 2014 - 15:09:59
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




Как сделать? Найти позицию вхождения легче простого, а строку хз как получить.
Есть всего 1 мысль. После нахождения элемента, разбить текст на строки и длину каждой строки плюсовать к предыдущей длине строки и сравнивать с позицией.

Какие идеи?
 
 Top
OrmaJever Модератор
Отправлено: 10 Апреля, 2014 - 15:44:39
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




PHP:
скопировать код в буфер обмена
  1. $text = 'str1
  2. dasdasd
  3. stats_absolute_deviation(asdsadsadasd
  4.    asdsadsadasd
  5. asdsa';
  6. echo substr_count(substr($text, 0, strpos($text, "deviation")), "\n")+1;


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Bio man
Отправлено: 10 Апреля, 2014 - 15:54:29
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




А если в тексте больше 1 вхождения подстроки?
(Добавление)
Решил задачу, как говорил в 1 посте.
PHP:
скопировать код в буфер обмена
  1. protected static function _getLineByPos($text, $pos)
  2. {
  3.         $lines = preg_split('/\\r\\n?|\\n/', $text);
  4.         $length = 0;
  5.         $line = 0;
  6.  
  7.         for($i=0,$c=count($lines);$i<$c;$i++) {
  8.                 $length += mb_strlen($lines[$i])-1;
  9.                 if($length>=$pos) {
  10.                         $line = $i;
  11.                         break;
  12.                 }
  13.         }
  14.         return $line;
  15. }
 
 Top
Ch_chov
Отправлено: 10 Апреля, 2014 - 16:08:12
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


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




Bio man, сделать из файла массив строк можно с помощью file
 
 Top
Bio man
Отправлено: 10 Апреля, 2014 - 16:09:19
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




Ch_chov, я в курсе. но текст не из файла
 
 Top
OrmaJever Модератор
Отправлено: 10 Апреля, 2014 - 17:43:19
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Bio man даже если он не из файлато то его можно поделить по \n, и затем в цикле поискать в каждой строчке нужную строку, если есть то выводим ключ+1
(Добавление)
Bio man пишет:
А если в тексте больше 1 вхождения подстроки?

И что в этом случае делать? Ваш код по-моему берёт первое вхождение и возвращает номер строки, мой делает тоже самое Растерялся


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 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