Доброго всем времени суток У меня имеется текстовый документ (документ формата docx) страниц на 20 следующего содержания Можно ли с помощь функций для обработки текста вырезать все строки после "en" и сохранить их в массив в виде отдельных строк? Например $a[0] = 'Then why does your tail wag' $a[1] = 'when I call you brother, Brother?' и далее..
0. Это нужно сделать один раз или это нужно автоматизировать? 1. ты можешь тупо Ctrl+A, Ctrl+C и Ctrl+V этот текст в текстовый файл или форму ввода на сайте? 2. источник этого дерьма можно починить на выдачу текста не в docx, а в простом голом тексте? это делается проще этот текст это json формат представления данных более-менее человекочитаемый формат, который удобно читать и програмно в пхп есть функции для работы с json и работать с ним весьма просто, т.к. он легко переводится в ассоциативные массивы или недообъекты. твой текст можно представить так: Код (Javascript): { "id": 184, "start": 1062.66, "finish": 1064.159, "en": "Then why does your tail wag", "ru": "Taк пoчeмy ты виляeшь xвocтoм,", " ": " Then why does your tail wag" }, { "id": 185, "start": 1064.259, "finish": 1066.65, "en": "when I call you brother, Brother?", "ru": "кoгдa я нaзывaю тeбя бpaтoм, бpaт?", " ": " when I call you brother, Brother?" }, { "id": 186, "start": 1067.38, "finish": 1069.76, "en": "Hey. Stop that.", "ru": "Эй. Пpeкpaти.", " ": " Hey. Stop that." }, { "id": 187, "start": 1069.86, "finish": 1071.69, "en": "Looks like weird is the new normal, buddy.", "ru": "Пoxoжe, быть cтpaнным нopмaльнo.", " ": " Looks like weird is the new normal, buddy." } --- Добавлено --- выбрать все английские тексты отсюда довольно легко (т.к. эти блоки идут через запятую и значит это массив, то для корректной работы парсера json нужно взять их в квадратные скобки, т.к. именно так в json обозначаются перечисления) PHP: <?php $rawData = '[ { "id": 184, "start": 1062.66, "finish": 1064.159, "en": "Then why does your tail wag", "ru": "Taк пoчeмy ты виляeшь xвocтoм,", " ": " Then why does your tail wag" }, { "id": 185, "start": 1064.259, "finish": 1066.65, "en": "when I call you brother, Brother?", "ru": "кoгдa я нaзывaю тeбя бpaтoм, бpaт?", " ": " when I call you brother, Brother?" }, { "id": 186, "start": 1067.38, "finish": 1069.76, "en": "Hey. Stop that.", "ru": "Эй. Пpeкpaти.", " ": " Hey. Stop that." }, { "id": 187, "start": 1069.86, "finish": 1071.69, "en": "Looks like weird is the new normal, buddy.", "ru": "Пoxoжe, быть cтpaнным нopмaльнo.", " ": " Looks like weird is the new normal, buddy." } ]'; $data = json_decode($rawData, true); $en = []; foreach ($data as $key => $entry ){ $en[$key] = $entry['en']; } echo '<pre>'.var_export($en).'</pre>'; ?> я оставил в итоговом массиве ключи из исходного, чтобы по ключу можно было узнать, откуда взята фраза.
Конечно простым копипастом можно вырезать и вставить, но у меня текста такого довольно большой объем. Хотелось бы авторизировать процесс Выдачу текста можно производить в любом формате, принимается даже простая распечатка в txt файл или вывод на экран
Значит в переменную $data присвоить весть документ и с помощью функции пройтись по его содержанию? --- Добавлено --- нет пока ...
Эта часть понятна. PHP: $data = json_decode($rawData, true); $en = []; foreach ($data as $key => $entry ){ $en[$key] = $entry['en']; } echo '<pre>'.var_export($en).'</pre>'; просто хотел уточнить содержимое переменной $rawData.
В чем прелесть данного форума, то что если ты написал код в правильном редакторе, то все функции кликабельны, кликни на PHP: json_decode() и там вся инфа по этой функции и тебе сразу стан ясно, что $rawData - это строка (string) json для декодирования. Так что если у тебя файл с содержимым JSON то читаешь его в строку, эту строку загоняешь в переменную, в функцию и всё. Для более простой работы, весь этот JSON код скопируй и сохрани в обычном текстовом файле, а не в docx
теперь ясно. Только скрипт ошибку выдает ... Код (CSS): Parse error: syntax error, unexpected '[' in C:\OpenServer\domains\mypages\json_in_array.php on line 22 PHP: $stroka = json_decode($my_json, true); $en = []; foreach ($stroka as $key => $entry){ $en[$key] = $entry['en']; } var_dump($stroka);
Но, кстати, полезно знать, что в 5.3 был только синтаксис array (/*элементы*/), а в 5.4 появился [/*элементы */]. У меня есть один клиент, сервера которого с его кучей магазинов на старых Open Cart на современный PHP - себе дороже, он мне полноценно за такую работу всё равно не заплатит. Приходится для него писать на 5.3. Но новые проекты только на 7+
Скопировал скрипт полностью без всяких изменений и снова Warning: Invalid argument supplied for foreach() in C:\OSPanel\domains\pages\english.php on line 37 array ( ) ПХП последней версии http://prntscr.com/jt2mfy --- Добавлено --- и phpdesigner ругается на строку $en = [];, пишет синтаксическая ошибка..
@Димка, ошибка же изменилась. Читаешь сообщения же. Судя по коду и этому сообщению, что-то не то с твоим JSON-ом, json_decode его не понимает. Попробуй выяснить что с помощью https://php.ru/manual/function.json-last-error.html --- Добавлено --- А Word не повредил там чегой-нибудь, какие-нибудь красявые кавычки вместо нормальных не поставил? phpdesigner - очень старая IDE. Ставь NetBeans или phpStorm, они понимают современный язык
Забыл конфиг изменить, а так семерка http://skrinshoter.ru/s/100618/LTYJwmuJ?a --- Добавлено --- Наконец скрипт запустился Код (Text): 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.', ) 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.', ) --- Добавлено --- Всего две строки а так сокращает муторную работу..
Все работает после прямого поставления значения в переменную $rawData, но если встречаются в тексте апостроф (') в сокращениях dotn't, haven't isn't и др то строка становится не оконченной (не хватает парных (') , вставка обратных слеш не помогает... Я решил все в текстовый файл перекинуть и уже из него все обработать и вывести PHP: $fp = fopen("songs.txt", r); if ($fp) { while (!feof($fp)) { $mytext = fread($fp,111); $Data = $mytext; echo $mytext."<br>"; } } else echo " ERROR"; fclose($fp); Но тут теперь вопрос встает как в одну переменную все содержимое файла поместить? При выводе он конец файла только выдает... --- Добавлено --- Код (Text): er\">items for sale!"}]' --- Добавлено --- В цикле конечно можно пробежаться, но как строку то из этого получить...
В цикле конечно можно пробежаться, но как строку то из этого получ Ага функция file_get_content в строку весь текст выводит в справочнике нашел , но все равно спасибо. --- Добавлено --- А слешkи вот так вставлял: for example: Do you know php lenguage? No, I don\'t. I know php language a little bit. Вот думаю ,что иначе их ни как не поставишь...
Можно неизящно, зато мощно (тупо): - в исходном тексте есть система en.... ru... - берем это для опорных точек в explode - потом каждый маленький уже кусочек дотачиваем заменами (или подобным)
@Димка просто читай из файла или заюзай HEREDOC https://php.ru/manual/language.types.string.html#language.types.string.syntax.heredoc
Дурной форум вытер мое продолжение. Что не надо ничего читать. Киньте голый текст (кусок) и вам его мигом разгрызут простым кодом на несколько строк. Посмотрите и это будет лучше 100 прочтений. Там, я думаю, preg_match_all сработает без проблем, никакие апострофы не будут страшны. Пусть не супер-пупер, зато уже изящно и все еще просто. Вообще, странно, что такой вопрос возник да еще завис: первое, что делает любой пхп-щик - это поглощает текст и выделяет в нем нужное ))