Форумы портала PHP.SU » » Вопросы новичков » Преобразовать текст в читаемый вид

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

1. Rival700 - 24 Мая, 2018 - 23:32:23 - перейти к сообщению
Это получается парсер текста, подскажите пожалуйста как это реализовать с условием что текст идёт в одну строку.
"Пример" (Отобразить)



Спойлер (Отобразить)
2. Vladimir Kheifets - 25 Мая, 2018 - 19:34:28 - перейти к сообщению
Rival700 пишет:
Это получается парсер текста, подскажите пожалуйста как это реализовать с условием что текст идёт в одну строку.
"Пример" (Отобразить)



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

Добрый день!
Уточните, пожалуйста, что Вы имели в виду написав:
".... как это реализовать с условием что текст идёт в одну строку"
Не понятно, что беспокоит. Так не диагноз поставить и лечить ни понятно от чего... Однако
3. Rival700 - 26 Мая, 2018 - 01:48:56 - перейти к сообщению
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:" тоже не может найти. Теперь не знаю что делать.
4. andrewkard - 26 Мая, 2018 - 09:33:52 - перейти к сообщению
Пользуюсь такой функцией:
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.  
5. Vladimir Kheifets - 26 Мая, 2018 - 17:04:23 - перейти к сообщению
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)"
Спойлер (Отобразить)

Удачи!
6. Rival700 - 29 Мая, 2018 - 20:34:17 - перейти к сообщению
[quote=Vladimir Kheifets][/quote][quote=andrewkard][/quote]
Спасибо за функции, теперь я понял что проблема была в базе, скорее всего в кодировке. Так как если тот-же полученный текст скопировать с браузера в переменную то всё работает. Я так понимаю нужно задать кодировку запроса, как смогу заняться отпишу о результате.
7. Vladimir Kheifets - 30 Мая, 2018 - 09:33:22 - перейти к сообщению
Rival700 пишет:
Я так понимаю нужно задать кодировку запроса, как смогу заняться отпишу о результате.

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

Удачи!

 

Powered by ExBB FM 1.0 RC1