За последние 24 часа нас посетили 62092 программиста и 1781 робот. Сейчас ищут 848 программистов ...

Поиск строки в текстовом документе

Тема в разделе "PHP для новичков", создана пользователем Димка, 9 июн 2018.

  1. Димка

    Димка Новичок

    С нами с:
    9 июн 2018
    Сообщения:
    15
    Симпатии:
    0
    Доброго всем времени суток :)
    У меня имеется текстовый документ (документ формата docx) страниц на 20 следующего содержания

    Можно ли с помощь функций для обработки текста вырезать все строки после "en" и сохранить их в массив в виде отдельных строк?

    Например $a[0] = 'Then why does your tail wag'
    $a[1] = 'when I call you brother, Brother?'
    и далее..
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    0. Это нужно сделать один раз или это нужно автоматизировать?
    1. ты можешь тупо Ctrl+A, Ctrl+C и Ctrl+V этот текст в текстовый файл или форму ввода на сайте?
    2. источник этого дерьма можно починить на выдачу текста не в docx, а в простом голом тексте?

    это делается проще
    этот текст это json формат представления данных
    более-менее человекочитаемый формат, который удобно читать и програмно

    в пхп есть функции для работы с json и работать с ним весьма просто, т.к. он легко переводится в ассоциативные массивы или недообъекты.

    твой текст можно представить так:
    Код (Javascript):
    1. {
    2.     "id": 184,
    3.     "start": 1062.66,
    4.     "finish": 1064.159,
    5.     "en": "Then why does your tail wag",
    6.     "ru": "Taк пoчeмy ты виляeшь xвocтoм,",
    7.     " ": " Then why does your tail wag"
    8. }, {
    9.     "id": 185,
    10.     "start": 1064.259,
    11.     "finish": 1066.65,
    12.     "en": "when I call you brother, Brother?",
    13.     "ru": "кoгдa я нaзывaю тeбя бpaтoм, бpaт?",
    14.     " ": " when I call you brother, Brother?"
    15. }, {
    16.     "id": 186,
    17.     "start": 1067.38,
    18.     "finish": 1069.76,
    19.     "en": "Hey. Stop that.",
    20.     "ru": "Эй. Пpeкpaти.",
    21.     " ": " Hey. Stop that."
    22. }, {
    23.     "id": 187,
    24.     "start": 1069.86,
    25.     "finish": 1071.69,
    26.     "en": "Looks like weird is the new normal, buddy.",
    27.     "ru": "Пoxoжe, быть cтpaнным нopмaльнo.",
    28.     " ": " Looks like weird is the new normal, buddy."
    29. }
    --- Добавлено ---
    выбрать все английские тексты отсюда довольно легко

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

    PHP:
    1. <?php
    2.  
    3. $rawData = '[
    4. {
    5.    "id": 184,
    6.    "start": 1062.66,
    7.    "finish": 1064.159,
    8.    "en": "Then why does your tail wag",
    9.    "ru": "Taк пoчeмy ты виляeшь xвocтoм,",
    10.    " ": " Then why does your tail wag"
    11. }, {
    12.    "id": 185,
    13.    "start": 1064.259,
    14.    "finish": 1066.65,
    15.    "en": "when I call you brother, Brother?",
    16.    "ru": "кoгдa я нaзывaю тeбя бpaтoм, бpaт?",
    17.    " ": " when I call you brother, Brother?"
    18. }, {
    19.    "id": 186,
    20.    "start": 1067.38,
    21.    "finish": 1069.76,
    22.    "en": "Hey. Stop that.",
    23.    "ru": "Эй. Пpeкpaти.",
    24.    " ": " Hey. Stop that."
    25. }, {
    26.    "id": 187,
    27.    "start": 1069.86,
    28.    "finish": 1071.69,
    29.    "en": "Looks like weird is the new normal, buddy.",
    30.    "ru": "Пoxoжe, быть cтpaнным нopмaльнo.",
    31.    " ": " Looks like weird is the new normal, buddy."
    32. }
    33. ]';
    34.  
    35. $data = json_decode($rawData, true);
    36. $en = [];
    37. foreach ($data as  $key => $entry  ){
    38.     $en[$key] = $entry['en'];
    39. }
    40.  
    41. echo '<pre>'.var_export($en).'</pre>';
    42.  
    43. ?>
    я оставил в итоговом массиве ключи из исходного, чтобы по ключу можно было узнать, откуда взята фраза.
     
  3. Димка

    Димка Новичок

    С нами с:
    9 июн 2018
    Сообщения:
    15
    Симпатии:
    0
    Конечно простым копипастом можно вырезать и вставить, но у меня текста такого довольно большой объем. Хотелось бы авторизировать процесс
    Выдачу текста можно производить в любом формате, принимается даже простая распечатка в txt файл или вывод на экран
     
  4. username

    username Новичок

    С нами с:
    6 июл 2017
    Сообщения:
    223
    Симпатии:
    17
    с помощью json_decode текст удалось в массив перевести?
     
  5. Димка

    Димка Новичок

    С нами с:
    9 июн 2018
    Сообщения:
    15
    Симпатии:
    0
    Значит в переменную $data присвоить весть документ и с помощью функции пройтись по его содержанию?
    --- Добавлено ---
    нет пока ...
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    @Димка
    ты вообще не понимаешь то, что я написал, да?
     
  7. Димка

    Димка Новичок

    С нами с:
    9 июн 2018
    Сообщения:
    15
    Симпатии:
    0
    Эта часть понятна.

    PHP:
    1. $data = json_decode($rawData, true);
    2. $en = [];
    3. foreach ($data as  $key => $entry  ){
    4.     $en[$key] = $entry['en'];
    5. }
    6. echo '<pre>'.var_export($en).'</pre>';
    просто хотел уточнить содержимое переменной $rawData.
     
  8. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    В чем прелесть данного форума, то что если ты написал код в правильном редакторе, то все функции кликабельны, кликни на
    PHP:
    и там вся инфа по этой функции и тебе сразу стан ясно, что $rawData - это строка (string) json для декодирования. ;)

    Так что если у тебя файл с содержимым JSON то читаешь его в строку, эту строку загоняешь в переменную, в функцию и всё.

    Для более простой работы, весь этот JSON код скопируй и сохрани в обычном текстовом файле, а не в docx
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    вон оно, выше, всё содержимое разом.
     
  10. Димка

    Димка Новичок

    С нами с:
    9 июн 2018
    Сообщения:
    15
    Симпатии:
    0
    теперь ясно. Только скрипт ошибку выдает ...
    Код (CSS):
    1. Parse error: syntax error, unexpected '[' in C:\OpenServer\domains\mypages\json_in_array.php on line 22
    PHP:
    1. $stroka = json_decode($my_json, true);
    2. $en = [];
    3. foreach ($stroka as  $key => $entry){
    4.     $en[$key] = $entry['en'];
    5. }
    6. var_dump($stroka);
     
    #10 Димка, 9 июн 2018
    Последнее редактирование: 9 июн 2018
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Что ж вы все так древние версии PHP любите?
     
  12. Димка

    Димка Новичок

    С нами с:
    9 июн 2018
    Сообщения:
    15
    Симпатии:
    0
    последнюю версию скачал. Кстати мысли были что версия не та .. :)
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Но, кстати, полезно знать, что в 5.3 был только синтаксис array (/*элементы*/), а в 5.4 появился [/*элементы */]. У меня есть один клиент, сервера которого с его кучей магазинов на старых Open Cart на современный PHP - себе дороже, он мне полноценно за такую работу всё равно не заплатит. Приходится для него писать на 5.3. Но новые проекты только на 7+
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а ты не пробовал шутки ради один из них всё ж перевести на семёрочку?
     
  15. Димка

    Димка Новичок

    С нами с:
    9 июн 2018
    Сообщения:
    15
    Симпатии:
    0
    Скопировал скрипт полностью без всяких изменений и снова Warning: Invalid argument supplied for foreach() in C:\OSPanel\domains\pages\english.php on line 37
    array ( )

    ПХП последней версии http://prntscr.com/jt2mfy
    --- Добавлено ---
    и phpdesigner ругается на строку $en = [];, пишет синтаксическая ошибка..
     
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    @Димка, ошибка же изменилась. Читаешь сообщения же. Судя по коду и этому сообщению, что-то не то с твоим JSON-ом, json_decode его не понимает. Попробуй выяснить что с помощью https://php.ru/manual/function.json-last-error.html
    --- Добавлено ---
    А Word не повредил там чегой-нибудь, какие-нибудь красявые кавычки вместо нормальных не поставил?
    phpdesigner - очень старая IDE. Ставь NetBeans или phpStorm, они понимают современный язык
     
  17. Димка

    Димка Новичок

    С нами с:
    9 июн 2018
    Сообщения:
    15
    Симпатии:
    0
    да тяжелый случай, ладно попробую тогда на другом редакторе.... :(
     
  18. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Это не последняя, последняя версия - 7.2
     
  19. Димка

    Димка Новичок

    С нами с:
    9 июн 2018
    Сообщения:
    15
    Симпатии:
    0
    Забыл конфиг изменить, а так семерка http://skrinshoter.ru/s/100618/LTYJwmuJ?a
    --- Добавлено ---
    Наконец скрипт запустился :)
    Код (Text):
    1. array ( 0 => 'Then why does your tail wag', 1 => 'when I call you brother, Brother?', 2 => 'Hey. Stop that.', 3 => 'Looks like weird is the new normal, buddy.', )
    2. array ( 0 => 'Taк пoчeмy ты виляeшь xвocтoм,', 1 => 'кoгдa я нaзывaю тeбя бpaтoм, бpaт?', 2 => 'Эй. Пpeкpaти.', 3 => 'Пoxoжe, быть cтpaнным нopмaльнo.', )
    --- Добавлено ---
    Всего две строки а так сокращает муторную работу..
     
  20. Димка

    Димка Новичок

    С нами с:
    9 июн 2018
    Сообщения:
    15
    Симпатии:
    0
    Все работает после прямого поставления значения в переменную $rawData, но если встречаются в тексте апостроф (') в сокращениях dotn't, haven't isn't и др то строка становится не оконченной (не хватает парных (') , вставка обратных слеш не помогает...
    Я решил все в текстовый файл перекинуть и уже из него все обработать и вывести
    PHP:
    1. $fp = fopen("songs.txt", r);
    2. if ($fp) {
    3.     while (!feof($fp)) {
    4.         $mytext = fread($fp,111);
    5.         $Data = $mytext;
    6.         echo $mytext."<br>";
    7.     }
    8. }
    9. else echo " ERROR";
    10. fclose($fp);
    Но тут теперь вопрос встает как в одну переменную все содержимое файла поместить? При выводе он конец файла только выдает...
    --- Добавлено ---
    Код (Text):
    1. er\">items for sale!"}]'
    --- Добавлено ---
    В цикле конечно можно пробежаться, но как строку то из этого получить...
     
  21. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    file_get_contents
    Покажите, как вставляете обратный слеш
     
  22. Димка

    Димка Новичок

    С нами с:
    9 июн 2018
    Сообщения:
    15
    Симпатии:
    0
    В цикле конечно можно пробежаться, но как строку то из этого получ
    Ага функция file_get_content в строку весь текст выводит в справочнике нашел , но все равно спасибо.
    --- Добавлено ---
    А слешkи вот так вставлял: for example: Do you know php lenguage? No, I don\'t. I know php language a little bit.
    Вот думаю ,что иначе их ни как не поставишь...
     
  23. tania_v

    tania_v Активный пользователь

    С нами с:
    7 июн 2018
    Сообщения:
    36
    Симпатии:
    5
    Можно неизящно, зато мощно (тупо):
    - в исходном тексте есть система en.... ru...
    - берем это для опорных точек в explode
    - потом каждый маленький уже кусочек дотачиваем заменами (или подобным)
     
    Karabas_il нравится это.
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  25. tania_v

    tania_v Активный пользователь

    С нами с:
    7 июн 2018
    Сообщения:
    36
    Симпатии:
    5
    Дурной форум вытер мое продолжение. Что не надо ничего читать. Киньте голый текст (кусок) и вам его мигом разгрызут простым кодом на несколько строк. Посмотрите и это будет лучше 100 прочтений.

    Там, я думаю, preg_match_all сработает без проблем, никакие апострофы не будут страшны. Пусть не супер-пупер, зато уже изящно и все еще просто.

    Вообще, странно, что такой вопрос возник да еще завис: первое, что делает любой пхп-щик - это поглощает текст и выделяет в нем нужное ))
     
    #25 tania_v, 11 июн 2018
    Последнее редактирование: 11 июн 2018