Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программное обеспечение Windows (http://forum.oszone.net/forumdisplay.php?f=7)
-   -   Нужна особая программа, для редактирования текста любого вида (http://forum.oszone.net/showthread.php?t=334787)

akvarel_ps 11-05-2018 16:13 2813198

Нужна особая программа, для редактирования текста любого вида
 
Приветствуются вообще любые решения, главное - чтобы работали, и в принципе были удобными
И желательно, чтобы софт работал по каким-то пресетам, или даже из командной строки, путём передачи аргументов.




Короче, есть такая задача:

Есть файл, в котором информация записана в подобном виде:


param="test1" preset="default" shell="def"
param="test2" preset="admin" shell="high"
param="test3" preset="user" shell="med"


(и так далее...)

Нужно сделать несколько действий, например, привести текст в такой вид:

shell="def" param="test1"
shell="high" param="test2"
shell="med" param="test3"


(ключ preset с его значением - вырезан
ключ shell - стал первым
ключ param - стал последним)


Так вот, задача - сделать это максимально быстро, а желательно - автоматизировать


Ещё один пример манипуляций, которые нужно провести над тем же текстом:

def default test1
high admin test2
med user test3


(просто получаем все значения между " и ", вырезаем всё остальное, а потом меняем местами первое и последнее)

a_axe 11-05-2018 16:22 2813202

Цитата:

Цитата akvarel_ps
Нужно сделать несколько действий, например, привести текст в такой вид:
shell="def" param="test1"
shell="high" param="test2"
shell="med" param="test3" »

Легко решается например (но не только) с помощью Excel - функция "текст по столбцам" с разбивкой по пробелу, затем удалить лишний столбец и поменять местами два оставшиеся.
Цитата:

Цитата akvarel_ps
Ещё один пример манипуляций, которые нужно провести над тем же текстом:
def default test1
high admin test2
med user test3 »

Поиск и замена текста вида "shell=" на "" (пустую строку) в любом текстовом редакторе, и так по всем ненужным образцам текста, которые знаете только вы.

Полагаю, чтобы предложить более специализированное решение, вас попросят приложить образец реального документа, приведенных кусочков будет недостаточно.

akvarel_ps 11-05-2018 16:35 2813206

Цитата:

Цитата a_axe
Полагаю, чтобы предложить более специализированное решение, вас попросят приложить образец реального документа, приведенных кусочков будет недостаточно. »

Может, кто часто работает с разным текстом, знает способы автоматизации.

Не могу найти какой-то удобный инструмент, который будет не удалять текст (заменять на "пустую строку"), а именно копировать заданный, например, регулярным выражением текст, и вставлять его в заданное место в документе. Пробовал с "вхождениями" в np++, и даже нашёл способ копировать в буфер все строки, которые np++ нашёл по моей маске. Но этот способ не очень удобно применять на крупных файлах... Поэтому, ищу подобное решение.

Но за excel спасибо, видимо стоит в нём поковыряться ещё, может найду ответ там)

Iska 11-05-2018 16:40 2813208

Цитата:

Цитата akvarel_ps
Так вот, задача - сделать это максимально быстро, а желательно - автоматизировать »

Скрипты, скрипты и ещё раз скрипты. Внешние, либо используемые в качестве встроенного языка. В данном случае — использование регулярных выражений для поиска и замены.

Цитата:

Цитата a_axe
Легко решается например (но не только) с помощью Excel - функция "текст по столбцам" с разбивкой по пробелу, затем удалить лишний столбец и поменять местами два оставшиеся. »

Я бы таки, коль использовать Microsoft Office, Word предпочёл — те же регулярки. Кто знает, что там на самом деле внутри test1, test2, test3.

Цитата:

Цитата akvarel_ps
Ещё один пример манипуляций, которые нужно провести над тем же текстом: »

Аналогично. Изучайте регулярные выражения. А уж какой конкретно инструмент будете использовать — не так уж и важно.

Цитата:

Цитата akvarel_ps
Не могу найти какой-то удобный инструмент, который будет не удалять текст (заменять на "пустую строку"), а именно копировать заданный, например, регулярным выражением текст, и вставлять его в заданное место в документе. Пробовал с "вхождениями" в np++, »

Те же самые регулярные выражения. Для начала: Regular Expressions - Notepad++ Wiki.

Цитата:

Цитата akvarel_ps
Может, кто часто работает с разным текстом, знает способы автоматизации. »

Цитата:

Цитата akvarel_ps
Но этот способ не очень удобно применять на крупных файлах... »

Скрипты.

akvarel_ps 11-05-2018 16:47 2813213

Цитата:

Цитата Iska
Те же самые регулярные выражения. Для начала: Regular Expressions - Notepad++ Wiki. »

Уже довольно много чего знаю по регуляркам. Но искал для этого не блокноты, а какое-то консольное приложение, желательно. Лишь бы каждый раз не печатать/копировать, не открывать какие-то окна, а просто запустить батник, или пресет.

Уже был очень близок, нашёл реально удобный способ, но его единственным минусом оказалась скорость работы. Крупные файлы обрабатывает по 3 минуты, а действие крайне простое, казалось бы.

Iska 11-05-2018 16:53 2813217

Цитата:

Цитата akvarel_ps
а какое-то консольное приложение, желательно. »

WSH, PowerShell — вот Вам зараз два консольных приложения ;). Для любителей Unix есть реализации sed под Windows.

Цитата:

Цитата akvarel_ps
нашёл реально удобный способ, но его единственным минусом оказалась скорость работы. Крупные файлы обрабатывает по 3 минуты, а действие крайне простое, казалось бы. »

Крупные — это сколько? Способ — какой?

akvarel_ps 11-05-2018 17:03 2813222

Цитата:

Цитата Iska
Крупные — это сколько? Способ — какой? »

Крупные - около 1500 строк

Способ - через np++ плагин, скрипт на питоне. Собсна, из-за питона и медленно)

Iska 11-05-2018 17:32 2813231

Цитата:

Цитата akvarel_ps
Крупные - около 1500 строк »

Да ну, это копейки. Я предполагал, что речь идёт о сотнях мегабайт.

Цитата:

Цитата akvarel_ps
Способ - через np++ плагин, скрипт на питоне. Собсна, из-за питона и медленно) »

Такого быть не должно. В принципе.

Вот Вам пример кода на WSH, набросанного на скорую руку на коленке, без каких-либо проверок, который на первом Вашем примере делает указанную замену:
Скрытый текст
Код:

Option Explicit

Dim strSourceFile

Dim objFSO
Dim objRegExp

Dim strContent


strSourceFile = "C:\Мои проекты\0157\Source.txt"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objRegExp = WScript.CreateObject("VBScript.RegExp")

With objRegExp
        .Pattern = "^(param="".+"")\s+preset="".+""\s+(shell="".+"")$"
        .Global = True
        .MultiLine = True
        .IgnoreCase = True
End With


With objFSO.OpenTextFile(strSourceFile)
        strContent = .ReadAll()
        .Close
End With

If objRegExp.Test(strContent) Then
        strContent = objRegExp.Replace(strContent, "$2 $1")
       
        With objFSO.CreateTextFile(objFSO.BuildPath(objFSO.GetParentFolderName(strSourceFile), "Result.txt"), True)
                .Write strContent
                .Close
        End With
Else
        WScript.Echo "Not found"
End If

WScript.Quit 0


Если задать ему файл из полутора тысяч строк, то время выполнения даже не заметишь. Если скормить ему файл из миллиона строк:
Скрытый текст
Код:

C:\Мои проекты\0157>find.exe /v "" /c Source.txt

---------- SOURCE.TXT: 1000188


(около сорока мегабайт, тупо продублированы три Ваших строки из образца) — время выполнения всё равно займёт меньше секунды (конечно, само содержимое файла уже было в дисковом кэше, понятно):
Скрытый текст
Код:

C:\Мои проекты\0157>0002.vbs
11.05.2018 17:26:59
11.05.2018 17:27:02


Так что, никак не в Python'е тут дело. Над чем там можно пыхтеть ажник целых три минуты на полутора-то тысячах строк — даже не представляю.

akvarel_ps 11-05-2018 17:44 2813235

Цитата:

Цитата Iska
Вот Вам пример кода на WSH, набросанного на скорую руку на коленке, без каких-либо проверок, который на первом Вашем примере делает указанную замену: »

Вот, как вариант.

Цитата:

Цитата Iska
Так что, никак не в Python'е тут дело. Над чем там можно пыхтеть ажник целых три минуты на полутора-то тысячах строк — даже не представляю. »

Там строки куда большей длины, значительно.

И на этом спасибо,
Цитата:

Цитата akvarel_ps
Приветствуются вообще любые решения »


Iska 11-05-2018 17:57 2813240

Цитата:

Цитата akvarel_ps
Там строки куда большей длины, значительно. »

Смотрим выше:
Цитата:

Цитата a_axe
чтобы предложить более специализированное решение, вас попросят приложить образец реального документа, приведенных кусочков будет недостаточно. »

:).

Цитата:

Цитата akvarel_ps
Приветствуются вообще любые решения »

На PowerShell код будет короче, на sed — так вообще в одну строку: всё уложится в шаблон и параметры его применения.

akvarel_ps 11-05-2018 18:10 2813244

Цитата:

Цитата Iska
На PowerShell код будет короче, на sed — так вообще в одну строку: всё уложится в шаблон и параметры его применения. »

Да понятное дело.

Просто, даже так посмотреть, столько довольно простых в обращении программ сделано для монтажа видео/фото, а работа с текстом (основой) - не так проста, когда требуется сделать что-то чуть сложнее, чем просто написать пару инструкций.

Именно поэтому и обратился, потому что это не самая приоритетная задача для меня, но какое-то простое решение хочется под рукой иметь, когда опять будет нужно что-то подобное сделать.

Iska 11-05-2018 18:20 2813248

Цитата:

Цитата akvarel_ps
Просто, даже так посмотреть, столько довольно простых в обращении программ сделано для монтажа видео/фото, а работа с текстом (основой) - не так проста, когда требуется сделать что-то чуть сложнее, чем просто написать пару инструкций. »

Ну, Вы сравнили…

akvarel_ps 11-05-2018 18:26 2813252

Цитата:

Цитата Iska
Ну, Вы сравнили… »

Ну это ведь действительно так.

Сейчас гораздо проще работать с графикой, чем с текстовой информацией. Банальные действия выше указал, но чтобы даже их сделать - нужно прибегать к скриптам?)

Вариант с excel интересен, да и вообще - редактор текста по колонкам, по моему, удобное решение для такого. Либо в самом тексте создать что-то вроде переменной, с которой потом работать уже.

Iska 11-05-2018 18:41 2813257

akvarel_ps, не так. Где место для приложения каких-либо минимальных умственных усилий в графическом редакторе или программе нелинейного монтажа, вот буквально — где? Я не вижу. В случае же поиска и замены в текстовом файле Вам волей-неволей придётся приложить определённые умственные усилия для анализа содержимого. Можно, конечно, не прилагать — и тогда заменять методом «глазами нашёл, мышкой ткнул, выделил, на клавиатуре текст набрал (или вырезал, переместил, вставил)» — всё строго так, как это делается в упомянутых графических редакторах и программах нелинейного монтажа.

akvarel_ps 11-05-2018 18:56 2813267

Цитата:

Цитата Iska
Где место для приложения каких-либо минимальных умственных усилий в графическом редакторе или программе нелинейного монтажа, вот буквально — где? »

В том и дело.
Всё начинается с текста. Не буквально.

Обработка какого-то изображения в фотошопе - это ведь сложная задача, сложная, для того, кто фотошоп делал, но в итоге - простая для пользователя. Вернее, там есть свои нюансы, но сама суть, что машина облегчает задачу.

Для обработки текстур в современном игровом движке - нужно знать чуть больше, но в итоге, всё равно решает тулза, а не знания того, кто с ней работает.

Так вот, к чему я и пишу это. Достаточно много сделано, чтобы банально наложить картинку на видео, а ведь операция куда сложнее, чем переместить один символ в тексте в другое место, сохранив остальное содержимое.

Цитата:

Цитата Iska
Вам волей-неволей придётся приложить определённые умственные усилия для анализа содержимого. »

Для меня удивительно, что для редактирования текста, нет такого же простого решения, как тот же фотошоп. С текстом можно производить абсолютно любые манипуляции, но чтобы это сделать - нужно потратить время. Голова соображает, понимает, но не избавляет от рутинных действий.

Iska 11-05-2018 19:45 2813280

akvarel_ps, да причём тут сложность разработки самого приложения? Это Вы совсем не в ту степь зашли.

akvarel_ps 11-05-2018 20:00 2813287

Цитата:

Цитата Iska
причём тут сложность разработки самого приложения? »

Есть мощные инструменты, которые призваны решить определённые задачи быстрее/проще.
Для вышеуказанных задач с текстом, я не смог найти подобного. При том, что работа с текстом - более базовая ступень.
Цитата:

Цитата akvarel_ps
Для меня удивительно, что для редактирования текста, нет такого же простого решения, как тот же фотошоп. »


Iska 12-05-2018 07:21 2813320

akvarel_ps, Вы пытаетесь проводить аналогии между несопоставимыми концепциями.

ShaRP 03-06-2018 14:03 2816672

15 лет много работаю с текстами :) Пробовал десятки разных редакторов и процессоров (не буду перечислять). Использовал для работы с текстом и электронные таблицы тоже по вышеуказанному методу столбцов.
Имхо, ничего удобнее Python для описанных в теме задач не придумано.

Осуществлять перестановки и замены можно с помощью регулярных выражений, но:
  1. Нужны сложные выражения
  2. С перестановками подвыражений это становится еще сложнее
  3. Тестовые редакторы как правило не приспособлены под множественные замены / записи

Текстовые редакторы хорошо выполняют только однократную замену (простую или с регулярными подвыражениями).

Программа которая выполняет множественные замены, в том числе регулярные, у меня была, но она перестала поддерживаться много лет назад. Это Replace Text, ранее называвшаяся BK ReplaceEm.
Не обязательно работает уже в Windows 7. Периодически пытался найти ей замену, но так и не нашел.

Альтернативы ей так или иначе завязаны на grep , который я не использовал, см. ссылку на сайте поиска альтернатив: https://alternativeto.net/software/replace-text/

В итоге я пришел к тому что начал писать скрипты для замен на Python.

Причины:
  • простая работа с текстовыми файлами — одна строка открытие, еще одна построчное чтение, сохранение тоже просто
  • солидный аппарат строковых функций в модуле String и других модулях (find, replace, регулярные выражения ... )
  • с помощью split, join, slicing [:] можно разбивать строки на кусочки и массивы кусочков, обрабатывать и переставлять кусочки как вздумается
  • также можно выбрасывать ненужные тебе строки и целые блоки
  • работа с командной строкой
  • можно реализовывать любые свои сценарии, и запускать их не только из командной строки (см. ниже)

Итогом моей работы стала пара программ для множественных замен, вторая из которых брала список замен из .csv файла и обрабатывала столько файлов сколько я в этом .csv прописал, и именно так, как я их прописал.

Iska 03-06-2018 15:06 2816680

Цитата:

Цитата ShaRP
Текстовые редакторы хорошо выполняют только однократную замену (простую или с регулярными подвыражениями). »

А если он к тому же ядрёный сибирский мужик :) поддерживает автоматизацию? Я лично не вижу никаких особенных проблем написать макрос/скрипт для Microsoft Word/редактора Far Manager'а для множественных замен по сколь угодно сложным правилам.

Busla 03-06-2018 16:00 2816692

ShaRP, да, Replace Text довольно примитивная, замену ей недолго состряпать самому "на коленке".

Про Python не соглашусь: в плане работы с текстом он если и выделяется, то непродуманностью и непоследовательностью реализации. Например, find возвращает как бы индекс найденного, но я не могу прямо его передать в другую операцию со строкой, т.к. при отсутствии искомого возвратит "-1" , но это в то же время валидный индекс для последнего символа.

bredych 03-06-2018 20:53 2816730

когда много работал с регекспами, пользовал программку search&replace

язык регекспов у неё весьма простой и логичный, можно задавать в коде неограниченное число шаблонов поиска-замены. Как именно (каков порядок обхода) - не помню, лет 10 как не занимаюсь этим, но было очень удобно.
сам софт даже на уровень вин98 был легким, а на сегодняшних монстров - и вовсе не будет заметен.

Если в гугле не найдёте - маякните, попробую на старых помойках (дисках) поискать.
================

А если вообще лень или злой работодатель не позволяет ничего ставить - то даже в ворде есть весьма богатый язык регекспов, хотя отрабатывает ворд не столь четко, проглючивает, иногда надо раза по 2-3 прогнать, чтоб схавало замену, или что-либо еще.. Словом, это вариант "для бедных и ленивых" :)

ShaRP 23-06-2018 23:25 2819270

Цитата:

Цитата Iska
макрос/скрипт для Microsoft Word »

  1. Он текстовый процессор (более тяжелого класса)
  2. Он таки тяжелый (по времени загрузки и по занимаемой памяти)
  3. Он платный

Я пробовал одно время с Notepad++, но он тогда писал макросы в плохо читаемом виде, мне же было нужно частое редактирование макроса под другие значения.
Кроме того, мои задачи могут стоять так что надо
- менять надо что-то только внутри определенного блока тегов внутри файла
- менять во множестве файлов в разных папках за раз

Iska 23-06-2018 23:38 2819273

ShaRP, у меня там кроме Microsoft Word через прямой слэш упомянут ещё редактор Far Manager'а.
Цитата:

Цитата ShaRP
- менять во множестве файлов в разных папках за раз »

Far PlugRing - информация о плагине Regular Expression Search and Replace (RESearch)
RESearch — поиск и замена с рег.выражениями и многое другое - forum.farmanager.com


Время: 16:48.

Время: 16:48.
© OSzone.net 2001-