Edit XML file
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Edit XML file
Уважаемые коллеги,
Столкнулся с проблемой: нужно в выгруженный из базы данных из blob XML файл дописать пару строк из программы. На уровне ASCII не получается (похоже автоматом всегда дописывается chr(10) chr(13)) , библиотека IQXML вроде тоже не проходит хотя она хорошо парсит и пишет в новый файл. Кто что посоветует? C6.3 9055
Столкнулся с проблемой: нужно в выгруженный из базы данных из blob XML файл дописать пару строк из программы. На уровне ASCII не получается (похоже автоматом всегда дописывается chr(10) chr(13)) , библиотека IQXML вроде тоже не проходит хотя она хорошо парсит и пишет в новый файл. Кто что посоветует? C6.3 9055
- Игорь Столяров
- Ветеран движения
- Сообщения: 8033
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Нет, ну выход есть всегда .... Вопрос в том какой ценой ... 
1. Использовать драйвер BASIC, но придется добавлять в пустой файл две строки и далее загонять в него содержимое исходного файла.
2. Можно просто слить два текстовых файла командой вроде RUN('Copy title.txt+old.txt new.txt,1') и т.д. Что не есть красиво.
3. Сделать добавление строк через генерацию и запись VBScript.
Там хороший интерфейс обработки текстовых файлов. Но стоит ли для достаточно простой задачи так изголятся ?
Наверно если подумать, то и еще варианты найдутся.

1. Использовать драйвер BASIC, но придется добавлять в пустой файл две строки и далее загонять в него содержимое исходного файла.
2. Можно просто слить два текстовых файла командой вроде RUN('Copy title.txt+old.txt new.txt,1') и т.д. Что не есть красиво.
3. Сделать добавление строк через генерацию и запись VBScript.
Там хороший интерфейс обработки текстовых файлов. Но стоит ли для достаточно простой задачи так изголятся ?
Наверно если подумать, то и еще варианты найдутся.
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: Edit XML file
Используй драйвер DOS.seawolf писал(а):Уважаемые коллеги,
Столкнулся с проблемой: нужно в выгруженный из базы данных из blob XML файл дописать пару строк из программы. На уровне ASCII не получается (похоже автоматом всегда дописывается chr(10) chr(13)) , библиотека IQXML вроде тоже не проходит хотя она хорошо парсит и пишет в новый файл. Кто что посоветует? C6.3 9055
Он позволяет сделать именно то что тебе нужно.
Открыл файл. Дописал то что нужно и закрыл.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Вот пример:
Код: Выделить всё
PROGRAM
MAP
END
FileName STRING(255)
BufSize EQUATE(65536)
Tmp FILE,DRIVER('DOS'), NAME(FileName), PRE(Tmp)
Record RECORD
Buff STRING(BufSize)
END
END
CODE
FileName = 'temp.xml'
OPEN(Tmp, 042h)
IF ERRORCODE() THEN MESSAGE(ERROR()) END
Tmp:Buff = 'То что нам нужно добавить без перевода строк!'
ADD(Tmp,LEN(CLIP(Tmp:Buff)))
IF ERRORCODE() THEN MESSAGE(ERROR()) END
CLOSE(Tmp)
IF ERRORCODE() THEN MESSAGE(ERROR()) END
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
XML
Спасибо!
Проблема оказалась в том что XML идет UTF-16 и поэтому дописать прямо в лоб строку текста не получалось! Придеться искать средство перевести строку в 16 разрядов. В былые времена это было 5 clarione HEXEDIT demo. В 6 пока не нашел!
Проблема оказалась в том что XML идет UTF-16 и поэтому дописать прямо в лоб строку текста не получалось! Придеться искать средство перевести строку в 16 разрядов. В былые времена это было 5 clarione HEXEDIT demo. В 6 пока не нашел!
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Может быть народ кинет технологию преобразования ASCII в UTF-16 !?
Я сам такого не делал.
Могу предложить почитать:
http://msdn2.microsoft.com/en-us/library/ms776413.aspx
или погуглить ...
Как вариант - если нужно добавлять всегда одно и тоже в конец файла:
1. Создаешь в редакторе который может править UTF-16 текст который нужно вставить в конец файла.
2. Смотришь коды строки и собираешь из них данные для Кларион, типа var ='<10><13><232><123>' и т.д.
3. Записываешь эту строку в файл
Я сам такого не делал.
Могу предложить почитать:
http://msdn2.microsoft.com/en-us/library/ms776413.aspx
или погуглить ...
Как вариант - если нужно добавлять всегда одно и тоже в конец файла:
1. Создаешь в редакторе который может править UTF-16 текст который нужно вставить в конец файла.
2. Смотришь коды строки и собираешь из них данные для Кларион, типа var ='<10><13><232><123>' и т.д.
3. Записываешь эту строку в файл
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: API?
Вот смотри что в ClaList подсказали:seawolf писал(а):А можно название API функции ?
> Как произвести конвертацию подскажет кто нибудь?
> Нужно человеку на форуме:
> http://forum.clarionlife.net//viewtopic.php?t=1993
По-моему, UTF-16 это просто Unicode
Пусть S - Cstring
Код: Выделить всё
Module('Windows API')
MultiByteToWideChar(Unsigned Codepage,Ulong
dwFlags,ULong LpMultuByteStr, |
Long cbMultiByte, ULong LpWideCharStr,Long
cchWideChar),RAW,Ulong,PASCAL
WideCharToMultiByte(Unsigned Codepage,Ulong
dwFlags,ULong LpWideCharStr,Long cchWideChar, |
ULong lpMultuByteStr, Long cbMultiByte, Ulong
LpDefalutChar,Ulong lpUsedDefalutChar), |
Raw,Ulong,Pascal
End
S Cstring(...) ! Это строка, подлежащая преобразованию
UnicodeText &Cstring
L=Len(S)*2+4 ! Тут с запасом :)
UnicodeText &= New CString(L)
If
MultiByteToWideChar(1251,0,Address(S),-1,Address(UnicodeText),L).
Собственно, UnicodeText и есть то, что надо...
-------------------------
С уважением,
Юрий Философов
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
OK
Всем спасибо.
Пока проблему решили дописывая все руками (не так много файлов) и пихая в базу уже готовое и проверенное. Если придеться поюзать эти функции напишу результат !
Пока проблему решили дописывая все руками (не так много файлов) и пихая в базу уже готовое и проверенное. Если придеться поюзать эти функции напишу результат !
Отвечу сам себе и остальным. Для UTF-16 работает следующая схема (которая уже предлагалась). Строка которую надо туда дописать (в моем случае в начало файла) должна быть модифицирована и между символами требуется вставить <00>. После чего записываем в файл.
Пример:
Имеем строку которую надо записать 'TEST'
Пишем в файл 'T' & <00> & 'E' & <00> & 'S' & <00> & 'T'
Это работает!
Пример:
Имеем строку которую надо записать 'TEST'
Пишем в файл 'T' & <00> & 'E' & <00> & 'S' & <00> & 'T'
Это работает!