Войти

Показать полную графическую версию : Нужна особая программа, для редактирования текста любого вида


Страниц : [1] 2

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

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

a_axe
11-05-2018, 16:22
Нужно сделать несколько действий, например, привести текст в такой вид:
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 спасибо, видимо стоит в нём поковыряться ещё, может найду ответ там)

Iska
11-05-2018, 16:40
Так вот, задача - сделать это максимально быстро, а желательно - автоматизировать »
Скрипты, скрипты и ещё раз скрипты. Внешние, либо используемые в качестве встроенного языка. В данном случае — использование регулярных выражений для поиска и замены.

Легко решается например (но не только) с помощью 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 минуты, а действие крайне простое, казалось бы.

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

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

akvarel_ps
11-05-2018, 17:03
Крупные — это сколько? Способ — какой? »

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

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

Iska
11-05-2018, 17:32
Крупные - около 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'е тут дело. Над чем там можно пыхтеть ажник целых три минуты на полутора-то тысячах строк — даже не представляю. »

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

И на этом спасибо, Приветствуются вообще любые решения »

Iska
11-05-2018, 17:57
Там строки куда большей длины, значительно. »
Смотрим выше:
чтобы предложить более специализированное решение, вас попросят приложить образец реального документа, приведенных кусочков будет недостаточно. »
:).

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

akvarel_ps
11-05-2018, 18:10
На PowerShell код будет короче, на sed — так вообще в одну строку: всё уложится в шаблон и параметры его применения. »

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

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

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

Iska
11-05-2018, 18:20
Просто, даже так посмотреть, столько довольно простых в обращении программ сделано для монтажа видео/фото, а работа с текстом (основой) - не так проста, когда требуется сделать что-то чуть сложнее, чем просто написать пару инструкций. »
Ну, Вы сравнили…

akvarel_ps
11-05-2018, 18:26
Ну, Вы сравнили… »

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

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

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

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

akvarel_ps
11-05-2018, 18:56
Где место для приложения каких-либо минимальных умственных усилий в графическом редакторе или программе нелинейного монтажа, вот буквально — где? »

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

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

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

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

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

Iska
11-05-2018, 19:45
akvarel_ps, да причём тут сложность разработки самого приложения? Это Вы совсем не в ту степь зашли.

akvarel_ps
11-05-2018, 20:00
причём тут сложность разработки самого приложения? »

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

Iska
12-05-2018, 07:21
akvarel_ps, Вы пытаетесь проводить аналогии между несопоставимыми концепциями.

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

Осуществлять перестановки и замены можно с помощью регулярных выражений, но:

Нужны сложные выражения
С перестановками подвыражений это становится еще сложнее
Тестовые редакторы как правило не приспособлены под множественные замены / записи


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

Программа которая выполняет множественные замены, в том числе регулярные, у меня была, но она перестала поддерживаться много лет назад. Это 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
Текстовые редакторы хорошо выполняют только однократную замену (простую или с регулярными подвыражениями). »
А если он к тому же ядрёный сибирский мужик :) поддерживает автоматизацию? Я лично не вижу никаких особенных проблем написать макрос/скрипт для Microsoft Word/редактора Far Manager'а для множественных замен по сколь угодно сложным правилам.




© OSzone.net 2001-2012