Как редактировать .pc3
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как редактировать .pc3

Как редактировать .pc3

Ответ
Поиск в этой теме
Непрочитано 10.10.2014, 13:44 #1
Как редактировать .pc3
Linkor
 
что хочу, то и делаю
 
Регистрация: 30.06.2014
Сообщений: 119

Добрый день!
Подскажите, пожалуйста, можно ли с помощью vba редактировать файлы .pc3. Конктретно надо поменять длину листа
Просмотров: 5337
 
Непрочитано 10.10.2014, 14:29
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


http://forum.dwg.ru/showthread.php?t=109153
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 10.10.2014, 14:50
#3
Linkor

что хочу, то и делаю
 
Регистрация: 30.06.2014
Сообщений: 119


тёмный лес
Linkor вне форума  
 
Непрочитано 10.10.2014, 15:25
#4
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Вот ссылка: http://www.theswamp.org/index.php?topic=41529.0 , там на F# , но вполне себе переписывается на VB.NET или C#. По крайней мер, я проверял код на VB.net и он работал.

По сути, там просто заголовок и начиная с 60-го байта Zip архив...

Вот этот вот файл C:\ProgramData\Autodesk\ACA 2014\enu\Plotters\Default Windows System Printer.pc3 внутри содержит:


Удачи.

Последний раз редактировалось Boxa, 10.10.2014 в 15:33.
Boxa вне форума  
 
Непрочитано 12.10.2014, 10:48
#5
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Разобрать и посмотреть - это несложно. А вот изменить, собрать обратно и чтобы AutoCAD это "скушал" потом - задачка весьма неординарная!
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 14.10.2014, 14:30
#6
Linkor

что хочу, то и делаю
 
Регистрация: 30.06.2014
Сообщений: 119


Boxa
Подскажите, как на vba прочитать файл с 60го байта. Вроде Get #1, 60, varname. Но вылетает ошибка, какой должен быть тип у varname? И как его разархивировать на vba?

Последний раз редактировалось Linkor, 14.10.2014 в 15:09.
Linkor вне форума  
 
Непрочитано 14.10.2014, 15:56
#7
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Linkor, Я на VBA очень давно не писал, но думаю алгоритм примерно такой:
1. Читаем файл(http://www.sql.ru/forum/601640/prime...-fayla-v-ciklk)
2. Получаем массив байт
3. Сохраняем во временный файл с 60 байта и до конца
4. Запускаем архиватор командной строкой, где в параметрах указываем временный файл и куда распаковывать (http://www.cyberforum.ru/vba/thread786897.html)
5. Читаем распакованные данные.
Boxa вне форума  
 
Автор темы   Непрочитано 14.10.2014, 16:18
#8
Linkor

что хочу, то и делаю
 
Регистрация: 30.06.2014
Сообщений: 119


Цитата:
Сообщение от Boxa Посмотреть сообщение
Запускаем архиватор командной строкой, где в параметрах указываем временный файл и куда распаковывать
В этом мне разобраться не под силу (
И ещё же надо обратно всё запаковать
Linkor вне форума  
 
Непрочитано 14.10.2014, 16:30
#9
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Там же была ссылка http://www.cyberforum.ru/cmd-bat/thr...ml#post3685838
Boxa вне форума  
 
Автор темы   Непрочитано 14.10.2014, 16:49
#10
Linkor

что хочу, то и делаю
 
Регистрация: 30.06.2014
Сообщений: 119


К сожалению, да не программист я, чтобы вот так прям разобраться
Когда мы делаем временный файл, его надо сохранять как .zip?

Вот чито получается
Sub readfpc3()
Dim fso
Dim S As String
Set fso = CreateObject("Scripting.FileSystemObject")
' Set objShell = CreateObject("Shell.Application")
folder = "C:\Users\ternovykh.MOSTDORPROEKT\AppData\Roaming\Autodesk\C3D 2015\rus\Plotters\"
FN = folder + "HP127 2200 x 914.pc3"
FN1 = folder + "HP127 2200 x 914.rar"

Set ts = fso.OpenTextFile(FN, 1)
Set ts1 = fso.OpenTextFile(FN1, 2, True)

Open FN For Binary As #1
L = FileLen(FN)
S = Space(L)
Get #1, 60, S ' Read next record.

Dim F As Long
For F = 1 To L
ts1.write Mid(S, F, 1)
Next F
Shell "C:\Program Files (x86)\WinRAR\WinRAR.exe -e -o " & FN1 & " " & folder
Close #1 ' Close file.

End Sub

Но распаковать не получается, пишет архивы не найдены (

Последний раз редактировалось Linkor, 14.10.2014 в 17:05.
Linkor вне форума  
 
Непрочитано 14.10.2014, 17:06
#11
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Разбирайтесь не с наскока, а планомерно. Все получится.
zip, не zip, не принципиально.

PS/
Цитата:
...The FSO model, contained in the Scripting type library (Scrrun.dll), supports the creation and manipulation of text files through the TextStream object; however, the FSO model does not support binary files. To manipulate binary files, use the FileOpen Function with the Binary keyword....
Код:
[Выделить все]
Sub readfpc3()
    Dim S As String
    FN = "E:\3\Default Windows System Printer.pc3"
    FN1 = "E:\3\Default Windows System Printer.zip"

    Open FN For Binary As #1
    L = FileLen(FN)
    S = Space(L - 59)
    Get #1, 60, S ' Read next record.
    Close #1
    
    S = Right(S, Len(S) - 1)

    Open FN1 For Binary Access Write As #2
    Put #2, , S
    Close #2
End Sub
Только этот код Вам мало поможет, надо префекс и постфикс архива подписывать, иначе архиваторы эту галиматью воспринимать не будут.
Как это сделать в VBA даже разбираться не буду, если интересно ищите.
И еще, как называть файл, zip или rar, не имеет значения, а вот каким архиватором открывать, я думаю это важно. В частности, я пользовался вот этой сборкой http://dotnetzip.codeplex.com/

Удачи.

ЗЫЫ.
И это проблемки только с чтением этого файла, что там дальше, представить сложновато, но я думаю это для Вас будет очень увлекательно и позволит поднять уровень владения VBA на достаточную высоту.
Удачи.

Последний раз редактировалось Boxa, 14.10.2014 в 18:29.
Boxa вне форума  
 
Непрочитано 14.10.2014, 18:43
#12
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Boxa Посмотреть сообщение
что там дальше, представить сложновато
Схема проста:
Чтение файла - Распаковка - Парсинг - Внесение желаемых изменений - Обратное преобразование - Запаковка - Запись файла
Но чтение-распаковка - действительно не самое сложное...
Если интересно - Алексей aka bargool показывал чью-то уже готовую дотнетовскую библиотеку для этого, исходники лежат в свободном доступе на GitHub.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 14.10.2014, 20:00
#13
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Так для .net проблемы то нет, вполне рабочий код в 4 сообщение, проблема все это на VBA переписать =)

На данном этапе, собственно проблема в том, что отрезаем запакованные данные и нужно каким то образом из них сформировать кондиционный файл архива. Содержащий заголовок, список файлов, контрольную сумму и прочее.
а потом все это распаковать.
Затем отредактировать текстовый файл и запаковать не проблема.
Следующая сложность это выпилить из полученного архива именно запакованные данные без заголовков и прочего мусора.
А затем опять просто, дописать заголовок pc3 файла и .... ВСЁ.

Дело за малым, открыть стандарт zip архива и изучить... Начать можно от сюда: http://blog2k.ru/archives/3391

По крайней мере, я вижу всю эту историю именно так.

----- добавлено через ~2 ч. -----
Цитата:
Сообщение от Do$ Посмотреть сообщение
Если интересно - Алексей aka bargool показывал чью-то уже готовую дотнетовскую библиотеку для этого, исходники лежат в свободном доступе на GitHub
Интересно, но в его репозитарии на GitHub этого нет, так что посмотрел бы ссылочку.

Подумалось, что есть другой путь, создать консольную утилитку на .net и вызывать её из любой среды.
Попробовал, результаты "изысканий" тут: https://github.com/BoxaShu/unzip_pc3
Работает как то так:
Цитата:
unzip_pc3.exe e "Default Windows System Printer.pc3" в той же папке будет создан распакованный файлик "Default Windows System Printer.pc3.txt"
unzip_pc3.exe c "Default Windows System Printer.pc3.txt" в той же папке будет создан запакованный файлик "Default Windows System Printer.pc3.txt.pc3"
ЗЫ. Запаковка работает не правильно =о) Там что то считать нуна, но мне лень.
Все правильно теперь работает, можно через Shell распаковать pc3, поправить текстовый файлик так, как Вам нужно, затем запаковать его и передать AutoCAD-у.
Удачи в работе.

Последний раз редактировалось Boxa, 16.10.2014 в 11:28.
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как редактировать .pc3



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы по работе системы RuCAD Олег К. Прочее. Программное обеспечение 142 17.09.2019 05:06
Не могу в Autocad редактировать чертеж, экспортированный из AllPlan rouble Прочее. Программное обеспечение 4 30.03.2017 12:39
Как редактировать объемные элементы из вида "сверху" . Вопрос начинающего. fendermax AutoCAD 5 24.07.2013 13:03
Layout. Как редактировать, сохранять? kozaki AutoCAD 5 03.06.2013 20:34
Файл сохранен тока для просмотра можно ли его редактировать Анальный пират AutoCAD 3 17.02.2008 06:01