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]   

> Описание: Преобразовать текст в читаемый вид
Rival700
Отправлено: 24 Мая, 2018 - 23:32:23
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Май 2018  


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




Это получается парсер текста, подскажите пожалуйста как это реализовать с условием что текст идёт в одну строку.
"Пример" (Отобразить)



Спойлер (Отобразить)
 
 Top
Vladimir Kheifets
Отправлено: 25 Мая, 2018 - 19:34:28
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


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




Rival700 пишет:
Это получается парсер текста, подскажите пожалуйста как это реализовать с условием что текст идёт в одну строку.
"Пример" (Отобразить)



Спойлер (Отобразить)

Добрый день!
Уточните, пожалуйста, что Вы имели в виду написав:
".... как это реализовать с условием что текст идёт в одну строку"
Не понятно, что беспокоит. Так не диагноз поставить и лечить ни понятно от чего... Однако

(Отредактировано автором: 25 Мая, 2018 - 20:31:08)

 
 Top
Rival700
Отправлено: 26 Мая, 2018 - 01:48:56
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Май 2018  


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




Vladimir Kheifets пишет:
Rival700 пишет:
Это получается парсер текста, подскажите пожалуйста как это реализовать с условием что текст идёт в одну строку.
"Пример" (Отобразить)



Спойлер (Отобразить)

Добрый день!
Уточните, пожалуйста, что Вы имели в виду написав:
".... как это реализовать с условием что текст идёт в одну строку"
Не понятно, что беспокоит. Так не диагноз поставить и лечить ни понятно от чего... Однако


Я приложил текст под спойлером, он идёт в одну строку. Тоесть построчно пройтись по тексту не удастся. Я придумал сделать это так


Ищу позицию функцией strripos() "is the button Seat 1: " с пробелом
Ищу вторую позицию "in chips) Seat 2: "
Отнимаю от второй позиции пару символ и функцией filter_var извлекаю число - теперь мы знаем стек человека на первом месте.
Получаю полноценный стек и вставляю в переменную второй позиции ($stack in chips) Seat 2:
Теперь разница между первой и второй позицией будет ником, а значит нам нужно отнять одну позицию от второй что бы узнать длину ника, после чего благополучно положить в переменную.

Но есть проблема.
strripos($haystack, ' *** SHOW DOWN ***'); #не хочет работать с пробелом в начале. (без пробела всё ок)
Дело даже не в пробелах "in chips) Seat 2:" тоже не может найти. Теперь не знаю что делать.
 
 Top
andrewkard
Отправлено: 26 Мая, 2018 - 09:33:52
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




Пользуюсь такой функцией:
PHP:
скопировать код в буфер обмена
  1.  
  2. function get_string($str, $first, $end){
  3.     if(!empty($first)){
  4.         $pos = strpos($str, $first);
  5.         if($pos !== false){
  6.             $str = substr($str, $pos+strlen($first));
  7.         }
  8.     }
  9.  
  10.     if(!empty($end)){
  11.         $pos = strpos($str, $end);
  12.         if($pos !== false){
  13.             $str = substr($str, 0, $pos);
  14.         }
  15.     }
  16.  
  17.     $str = str_replace(array("\r\n", "\r", "\n"), " ", $str);
  18.  
  19.     return trim($str);
  20. }
  21.  


Результат:

PHP:
скопировать код в буфер обмена
  1.  
  2. $str = "PokerStars Hand #186788320061: Tournament #2313420953, $2.76+$0.24 USD Hold'em No Limit - Level I (10/20) - 2018/05/24 2:04:00 EET [2018/05/23 19:04:00 ET] Table '2313420953 1' 3-max Seat #1 is the button Seat 1: capers1234 (500 in chips) Seat 2: GerusaNSS (500 in chips) Seat 3: TPK45 (500 in chips) GerusaNSS: posts small blind 10 TPK45: posts big blind 20 *** HOLE CARDS *** Dealt to TPK45 [8h Ah] capers1234: folds GerusaNSS: raises 20 to 40 TPK45: calls 20 *** FLOP *** [2c Jh 3h] GerusaNSS: checks TPK45: bets 60 GerusaNSS: folds Uncalled bet (60) returned to TPK45 TPK45 collected 80 from pot TPK45: doesn't show hand *** SUMMARY *** Total pot 80 | Rake 0 Board [2c Jh 3h] Seat 1: capers1234 (button) folded before Flop (didn't bet) Seat 2: GerusaNSS (small blind) folded on the Flop Seat 3: TPK45 (big blind) collected (80)";
  3.  
  4. echo get_string($str,'button Seat 1:','(500 in chips)'); //capers1234
  5.  
 
 Top
Vladimir Kheifets
Отправлено: 26 Мая, 2018 - 17:04:23
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


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




Rival700 пишет:
Vladimir Kheifets пишет:
Rival700 пишет:
Это получается парсер текста, подскажите пожалуйста как это реализовать с условием что текст идёт в одну строку.
"Пример" (Отобразить)



Спойлер (Отобразить)

Добрый день!
Уточните, пожалуйста, что Вы имели в виду написав:
".... как это реализовать с условием что текст идёт в одну строку"
Не понятно, что беспокоит. Так не диагноз поставить и лечить ни понятно от чего... Однако


Я приложил текст под спойлером, он идёт в одну строку. Тоесть построчно пройтись по тексту не удастся. Я придумал сделать это так


Ищу позицию функцией strripos() "is the button Seat 1: " с пробелом
Ищу вторую позицию "in chips) Seat 2: "
Отнимаю от второй позиции пару символ и функцией filter_var извлекаю число - теперь мы знаем стек человека на первом месте.
Получаю полноценный стек и вставляю в переменную второй позиции ($stack in chips) Seat 2:
Теперь разница между первой и второй позицией будет ником, а значит нам нужно отнять одну позицию от второй что бы узнать длину ника, после чего благополучно положить в переменную.

Но есть проблема.
strripos($haystack, ' *** SHOW DOWN ***'); #не хочет работать с пробелом в начале. (без пробела всё ок)
Дело даже не в пробелах "in chips) Seat 2:" тоже не может найти. Теперь не знаю что делать.


Добрый день!
Советую Вам парсить техт не strpos(), а использую preg_match_all
Примущество в том, что если аккуратно написать pattern, то Вы получите массив значений, удовлетворяющему заданному условию.
можете использовать функцию:
Спойлер (Отобразить)


Или написать свой pattern, например, здесь показано, как найти в тексте подстроки
начинающееся с "Seat[один или несколько пробелов] [одно или несколько чисел]:" и заканчивающеся "(500 in chips)"
Спойлер (Отобразить)

Удачи!

(Отредактировано автором: 26 Мая, 2018 - 20:23:31)

 
 Top
Rival700
Отправлено: 29 Мая, 2018 - 20:34:17
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Май 2018  


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




[quote=Vladimir Kheifets][/quote][quote=andrewkard][/quote]
Спасибо за функции, теперь я понял что проблема была в базе, скорее всего в кодировке. Так как если тот-же полученный текст скопировать с браузера в переменную то всё работает. Я так понимаю нужно задать кодировку запроса, как смогу заняться отпишу о результате.
 
 Top
Vladimir Kheifets
Отправлено: 30 Мая, 2018 - 09:33:22
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


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




Rival700 пишет:
Я так понимаю нужно задать кодировку запроса, как смогу заняться отпишу о результате.

Добрый день!
По поводу кодировки. Обратите внимание на то, что кодировка PHP-скрипта, mysqli_set_charset и кодировка данных в БД должны совпадать.
Спойлер (Отобразить)
Если увидите нечитаемые символы или ромбики,
значит данные не в UTF-8. Может использовать функцию
Спойлер (Отобразить)

Удачи!
 
 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