Модератор
|
||||||
1 | ||||||
[sed] Из пакетного файла в CP1251 при помощи sed вставить в итоговый файл подстроку в UTF-820.05.2024, 19:17. Показов 622. Ответов 5
Метки нет (Все метки)
Доброго дня
С помощью sed и cmd (в Windows) решаю задачу формирования файла .cvs на основе другого .cvs в кодировке UTF-8. Почти все поля нового cvs получаются перестановкой полей исходного файла. Но одно поле должно быть задано любым другим удобным способом. Сама задача появилась из следующей проблемы. Имеется промышленный контроллер Овен ПР205, который требуется связать по Modbus RTU (или TCP) с панелью оператора Weintek MT8072iP. Из ПР205 возможен экспорт переменных в cvs файл в кодировке UTF-8 следующего содержания (привожу пример с 4 переменными, в реальной жизни их у меня около 50 и более). Кликните здесь для просмотра всего текста
Код
Имя переменной;Тип переменной;Адрес регистра;Значение по умолчанию;Комментарий;Имя параметра;Минимальное значение;Максимальное значение;Видимость;Путь к параметру;Формат отображения данных;Редактирование по сети;Архивировать значение n_Var1;Целочисленное;16384;50;Первая целочисленная переменная;Целочисленная переменная №1;0;99;Видим;Целые;Десятичный (Dec);Разрешено;Нет n_Var2;Целочисленное;16385;150;Вторая целочисленная переменная;Целочисленная переменная №2;100;199;Видим;Целые;Десятичный (Dec);Разрешено;Нет r_Var3;С плавающей запятой;16386;250;Первая вещественная переменная;Вещественная переменная №1;200;299;Видим;Вещественные;Десятичный (Dec);Разрешено;Нет r_Var4;С плавающей запятой;16388;350;Вторая вещественная переменная;Вещественная переменная №2;300;399;Видим;Вещественные;Десятичный (Dec);Разрешено;Нет Среда разработки Easy Builder для панели Weintek позволяет и импорт и экспорт тегов в csv файл кодировки UTF-8 со следующим расположением полей описаний переменных (тегов) Кликните здесь для просмотра всего текста
Код
n_Var1,Owen_PR205,3x,16384,"Первая целочисленная переменная",16-bit Unsigned n_Var2,Owen_PR205,3x,16385,"Вторая целочисленная переменная",16-bit Unsigned r_Var3,Owen_PR205,3x,16386,"Первая вещественная переменная",32-bit Float r_Var4,Owen_PR205,3x,16388,"Вторая вещественная переменная",32-bit Float Видно, что произведена перестановка полей и замена названий типов "Целочисленная" на "16-bit Unsigned" и т.п. А также, добавлено поле с содержимым "Owen_PR205". Это поле содержит название устройства, которое уже описано в Easy Builder - т.е. под этим названием в проекте подразумевается конфигурация связи панели с контроллером и это название даётся произвольно при конфигурировании проекта. Задача формирования решается скриптом cmd с вызовом sed
Пробовал сохранять пакетный файл в UTF-8, но тогда sed не принимал параметром файл в этой кодировке. Пришлось остаться в CP1251... Меня устраивает итоговый текстовый файл в кодировке Unicode без BOM, т.к. импорт в Weintek имеет некоторые особенности - потребуется дополнительное объединение нескольких файлов при помощи copy. Но на будущее, хотел бы узнать, как оставить BOM при обработке файла.
0
|
20.05.2024, 19:17 | |
Ответы с готовыми решениями:
5
Изменение файла (при помощи sed) SED Обработка файлов утилитой SED Sed заменить подстроку в строке Sed: не выводится в консоль stdout в кодировке UTF-8 Вставить текст в средину блока командой SED |
6301 / 2142 / 337
Регистрация: 10.12.2013
Сообщений: 7,381
|
|||||||||||||||||||||
22.05.2024, 15:20 | 2 | ||||||||||||||||||||
Сообщение было отмечено ФедосеевПавел как решение
Решение
powershell заменяет и sed, и cmd, и проблемы UTF-8, предоставляя решение в 1(одну) короткую строку.
Добавлено через 12 минут любопытно, а почему данная задача появилась в разделе Текстовые редакторы ? Впрочем, задачу можно решить с помощью текстового редактора. Не менее успешно ( пожалуй, даже более успешно ) можно решить с помощью sqlite3.exe Итак, на выбор:
решение с sqlite - самое предпочтительное нмв Добавлено через 1 час 58 минут PR205.CSV
0
|
Модератор
|
|
23.05.2024, 00:06 [ТС] | 3 |
Спасибо.
Всегда есть дефицит времени на изучение нового. Вероятно, для следующей задачи рассмотрю вариант с PowerShell. Добавлено через 18 минут А как в одну строку на PS? Ведь даже для удобства восприятия потребовалось 3 вызова sed (регулярок) и некоторое количество конфигурационных строк - названия файлов, названия типов переменных. Ведь если удастся решить на PS, то дополню программу действиями по слиянию результата с другим текстовым UTF-8 файлом с BOM. Это связано с тем, что панель имеет системные переменные, которые хочу сохранить экспортом, а потом объединять с тегами из контроллера. Таким образом, смогу одним вызовом получать результирующий файл. И вызывать многократно, по мере изменения количества и именования тегов.
0
|
6301 / 2142 / 337
Регистрация: 10.12.2013
Сообщений: 7,381
|
||||||||||||||||||||||||||||||||||||
23.05.2024, 02:26 | 4 | |||||||||||||||||||||||||||||||||||
Сообщение было отмечено ФедосеевПавел как решение
Решение
в одну строчку да, можно, но некрасиво / неудобно править
powershell : proc.ps1 ( кодировка должна быть UTF-8 BOM )
Perl proc.pl (кодировка должна быть UTF-8 )
Python proc.py
за perl и powershell ручаюсь, если перенаправлять в > файл
1
|
Модератор
|
|
23.05.2024, 07:32 [ТС] | 5 |
Здорово!!!!
Вечером вернусь с работы - попробую. Внешне выглядит не огромной скатертью, нужно выучить синтаксис и короткими скриптами преобразовывать.
0
|
6301 / 2142 / 337
Регистрация: 10.12.2013
Сообщений: 7,381
|
|||||||||||
23.05.2024, 13:36 | 6 | ||||||||||
PR205__Weintek ( кодировка UTF-8 )
Код
Первая целочисленная переменная=16-bit Unsigned Вторая целочисленная переменная=16-bit Unsigned Первая вещественная переменная=32-bit Float Вторая вещественная переменная=32-bit Float
* версия pwsh.exe кроссплатформенная, работает на Linux, MacOS, Windows powershell.exe for Windows должен быть обновлен до версии 5.1. это касется Windows 7 и 8. В версиях 10,11 и так всё хорошо.
0
|
23.05.2024, 13:36 | |
23.05.2024, 13:36 | |
Помогаю со студенческими работами здесь
6
Отредактировать файл используя sed Вставка текста в файл sed Редактор sed обрабатывает не весь файл Запись переменной в файл, используя sed Замена мусора в имени файла sed Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |