Показать полную графическую версию : Нужна особая программа, для редактирования текста любого вида
akvarel_ps
11-05-2018, 16:13
Приветствуются вообще любые решения, главное - чтобы работали, и в принципе были удобными
И желательно, чтобы софт работал по каким-то пресетам, или даже из командной строки, путём передачи аргументов.
Короче, есть такая задача:
Есть файл, в котором информация записана в подобном виде:
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
(просто получаем все значения между " и ", вырезаем всё остальное, а потом меняем местами первое и последнее)
Нужно сделать несколько действий, например, привести текст в такой вид:
shell="def" param="test1"
shell="high" param="test2"
shell="med" param="test3" »
Легко решается например (но не только) с помощью Excel - функция "текст по столбцам" с разбивкой по пробелу, затем удалить лишний столбец и поменять местами два оставшиеся.
Ещё один пример манипуляций, которые нужно провести над тем же текстом:
def default test1
high admin test2
med user test3 »
Поиск и замена текста вида "shell=" на "" (пустую строку) в любом текстовом редакторе, и так по всем ненужным образцам текста, которые знаете только вы.
Полагаю, чтобы предложить более специализированное решение, вас попросят приложить образец реального документа, приведенных кусочков будет недостаточно.
akvarel_ps
11-05-2018, 16:35
Полагаю, чтобы предложить более специализированное решение, вас попросят приложить образец реального документа, приведенных кусочков будет недостаточно. »
Может, кто часто работает с разным текстом, знает способы автоматизации.
Не могу найти какой-то удобный инструмент, который будет не удалять текст (заменять на "пустую строку"), а именно копировать заданный, например, регулярным выражением текст, и вставлять его в заданное место в документе. Пробовал с "вхождениями" в np++, и даже нашёл способ копировать в буфер все строки, которые np++ нашёл по моей маске. Но этот способ не очень удобно применять на крупных файлах... Поэтому, ищу подобное решение.
Но за excel спасибо, видимо стоит в нём поковыряться ещё, может найду ответ там)
Так вот, задача - сделать это максимально быстро, а желательно - автоматизировать »
Скрипты, скрипты и ещё раз скрипты. Внешние, либо используемые в качестве встроенного языка. В данном случае — использование регулярных выражений для поиска и замены.
Легко решается например (но не только) с помощью Excel - функция "текст по столбцам" с разбивкой по пробелу, затем удалить лишний столбец и поменять местами два оставшиеся. »
Я бы таки, коль использовать Microsoft Office, Word предпочёл — те же регулярки. Кто знает, что там на самом деле внутри test1, test2, test3.
Ещё один пример манипуляций, которые нужно провести над тем же текстом: »
Аналогично. Изучайте регулярные выражения. А уж какой конкретно инструмент будете использовать — не так уж и важно.
Не могу найти какой-то удобный инструмент, который будет не удалять текст (заменять на "пустую строку"), а именно копировать заданный, например, регулярным выражением текст, и вставлять его в заданное место в документе. Пробовал с "вхождениями" в np++, »
Те же самые регулярные выражения. Для начала: Regular Expressions - Notepad++ Wiki (http://docs.notepad-plus-plus.org/index.php/Regular_Expressions).
Может, кто часто работает с разным текстом, знает способы автоматизации. »
Но этот способ не очень удобно применять на крупных файлах... »
Скрипты.
akvarel_ps
11-05-2018, 16:47
Те же самые регулярные выражения. Для начала: Regular Expressions - Notepad++ Wiki. »
Уже довольно много чего знаю по регуляркам. Но искал для этого не блокноты, а какое-то консольное приложение, желательно. Лишь бы каждый раз не печатать/копировать, не открывать какие-то окна, а просто запустить батник, или пресет.
Уже был очень близок, нашёл реально удобный способ, но его единственным минусом оказалась скорость работы. Крупные файлы обрабатывает по 3 минуты, а действие крайне простое, казалось бы.
а какое-то консольное приложение, желательно. »
WSH, PowerShell — вот Вам зараз два консольных приложения ;). Для любителей Unix есть реализации sed под Windows.
нашёл реально удобный способ, но его единственным минусом оказалась скорость работы. Крупные файлы обрабатывает по 3 минуты, а действие крайне простое, казалось бы. »
Крупные — это сколько? Способ — какой?
akvarel_ps
11-05-2018, 17:03
Крупные — это сколько? Способ — какой? »
Крупные - около 1500 строк
Способ - через np++ плагин, скрипт на питоне. Собсна, из-за питона и медленно)
Крупные - около 1500 строк »
Да ну, это копейки. Я предполагал, что речь идёт о сотнях мегабайт.
Способ - через 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
Вот Вам пример кода на WSH, набросанного на скорую руку на коленке, без каких-либо проверок, который на первом Вашем примере делает указанную замену: »
Вот, как вариант.
Так что, никак не в Python'е тут дело. Над чем там можно пыхтеть ажник целых три минуты на полутора-то тысячах строк — даже не представляю. »
Там строки куда большей длины, значительно.
И на этом спасибо, Приветствуются вообще любые решения »
Там строки куда большей длины, значительно. »
Смотрим выше:
чтобы предложить более специализированное решение, вас попросят приложить образец реального документа, приведенных кусочков будет недостаточно. »
:).
Приветствуются вообще любые решения »
На PowerShell код будет короче, на sed — так вообще в одну строку: всё уложится в шаблон и параметры его применения.
akvarel_ps
11-05-2018, 18:10
На PowerShell код будет короче, на sed — так вообще в одну строку: всё уложится в шаблон и параметры его применения. »
Да понятное дело.
Просто, даже так посмотреть, столько довольно простых в обращении программ сделано для монтажа видео/фото, а работа с текстом (основой) - не так проста, когда требуется сделать что-то чуть сложнее, чем просто написать пару инструкций.
Именно поэтому и обратился, потому что это не самая приоритетная задача для меня, но какое-то простое решение хочется под рукой иметь, когда опять будет нужно что-то подобное сделать.
Просто, даже так посмотреть, столько довольно простых в обращении программ сделано для монтажа видео/фото, а работа с текстом (основой) - не так проста, когда требуется сделать что-то чуть сложнее, чем просто написать пару инструкций. »
Ну, Вы сравнили…
akvarel_ps
11-05-2018, 18:26
Ну, Вы сравнили… »
Ну это ведь действительно так.
Сейчас гораздо проще работать с графикой, чем с текстовой информацией. Банальные действия выше указал, но чтобы даже их сделать - нужно прибегать к скриптам?)
Вариант с excel интересен, да и вообще - редактор текста по колонкам, по моему, удобное решение для такого. Либо в самом тексте создать что-то вроде переменной, с которой потом работать уже.
akvarel_ps, не так. Где место для приложения каких-либо минимальных умственных усилий в графическом редакторе или программе нелинейного монтажа, вот буквально — где? Я не вижу. В случае же поиска и замены в текстовом файле Вам волей-неволей придётся приложить определённые умственные усилия для анализа содержимого. Можно, конечно, не прилагать — и тогда заменять методом «глазами нашёл, мышкой ткнул, выделил, на клавиатуре текст набрал (или вырезал, переместил, вставил)» — всё строго так, как это делается в упомянутых графических редакторах и программах нелинейного монтажа.
akvarel_ps
11-05-2018, 18:56
Где место для приложения каких-либо минимальных умственных усилий в графическом редакторе или программе нелинейного монтажа, вот буквально — где? »
В том и дело.
Всё начинается с текста. Не буквально.
Обработка какого-то изображения в фотошопе - это ведь сложная задача, сложная, для того, кто фотошоп делал, но в итоге - простая для пользователя. Вернее, там есть свои нюансы, но сама суть, что машина облегчает задачу.
Для обработки текстур в современном игровом движке - нужно знать чуть больше, но в итоге, всё равно решает тулза, а не знания того, кто с ней работает.
Так вот, к чему я и пишу это. Достаточно много сделано, чтобы банально наложить картинку на видео, а ведь операция куда сложнее, чем переместить один символ в тексте в другое место, сохранив остальное содержимое.
Вам волей-неволей придётся приложить определённые умственные усилия для анализа содержимого. »
Для меня удивительно, что для редактирования текста, нет такого же простого решения, как тот же фотошоп. С текстом можно производить абсолютно любые манипуляции, но чтобы это сделать - нужно потратить время. Голова соображает, понимает, но не избавляет от рутинных действий.
akvarel_ps, да причём тут сложность разработки самого приложения? Это Вы совсем не в ту степь зашли.
akvarel_ps
11-05-2018, 20:00
причём тут сложность разработки самого приложения? »
Есть мощные инструменты, которые призваны решить определённые задачи быстрее/проще.
Для вышеуказанных задач с текстом, я не смог найти подобного. При том, что работа с текстом - более базовая ступень.
Для меня удивительно, что для редактирования текста, нет такого же простого решения, как тот же фотошоп. »
akvarel_ps, Вы пытаетесь проводить аналогии между несопоставимыми концепциями.
15 лет много работаю с текстами :) Пробовал десятки разных редакторов и процессоров (не буду перечислять). Использовал для работы с текстом и электронные таблицы тоже по вышеуказанному методу столбцов.
Имхо, ничего удобнее Python для описанных в теме задач не придумано.
Осуществлять перестановки и замены можно с помощью регулярных выражений, но:
Нужны сложные выражения
С перестановками подвыражений это становится еще сложнее
Тестовые редакторы как правило не приспособлены под множественные замены / записи
Текстовые редакторы хорошо выполняют только однократную замену (простую или с регулярными подвыражениями).
Программа которая выполняет множественные замены, в том числе регулярные, у меня была, но она перестала поддерживаться много лет назад. Это Replace Text, ранее называвшаяся BK ReplaceEm.
Не обязательно работает уже в Windows 7. Периодически пытался найти ей замену, но так и не нашел.
Альтернативы ей так или иначе завязаны на grep , который я не использовал, см. ссылку на сайте поиска альтернатив: https://alternativeto.net/software/replace-text/
В итоге я пришел к тому что начал писать скрипты для замен на Python.
Причины:
простая работа с текстовыми файлами — одна строка открытие, еще одна построчное чтение, сохранение тоже просто
солидный аппарат строковых функций в модуле String и других модулях (find, replace, регулярные выражения ... )
с помощью split, join, slicing [:] можно разбивать строки на кусочки и массивы кусочков, обрабатывать и переставлять кусочки как вздумается
также можно выбрасывать ненужные тебе строки и целые блоки
работа с командной строкой
можно реализовывать любые свои сценарии, и запускать их не только из командной строки (см. ниже)
Итогом моей работы стала пара программ для множественных замен, вторая из которых брала список замен из .csv файла и обрабатывала столько файлов сколько я в этом .csv прописал, и именно так, как я их прописал.
Текстовые редакторы хорошо выполняют только однократную замену (простую или с регулярными подвыражениями). »
А если он к тому же ядрёный сибирский мужик :) поддерживает автоматизацию? Я лично не вижу никаких особенных проблем написать макрос/скрипт для Microsoft Word/редактора Far Manager'а для множественных замен по сколь угодно сложным правилам.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.