Edit XML file

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
seawolf
Старожил
Сообщения: 217
Зарегистрирован: 08 Июль 2005, 11:23
Откуда: St. Petersburg

Edit XML file

Сообщение seawolf »

Уважаемые коллеги,
Столкнулся с проблемой: нужно в выгруженный из базы данных из blob XML файл дописать пару строк из программы. На уровне ASCII не получается (похоже автоматом всегда дописывается chr(10) chr(13)) , библиотека IQXML вроде тоже не проходит хотя она хорошо парсит и пишет в новый файл. Кто что посоветует? C6.3 9055
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Сообщение Дед Пахом »

Даже и не знаю, что посоветовать, чтобы в текстовый файл 2 строки дописать :D
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8033
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Сообщение Игорь Столяров »

Нет, ну выход есть всегда .... Вопрос в том какой ценой ... ;)

1. Использовать драйвер BASIC, но придется добавлять в пустой файл две строки и далее загонять в него содержимое исходного файла.

2. Можно просто слить два текстовых файла командой вроде RUN('Copy title.txt+old.txt new.txt,1') и т.д. Что не есть красиво.

3. Сделать добавление строк через генерацию и запись VBScript.
Там хороший интерфейс обработки текстовых файлов. Но стоит ли для достаточно простой задачи так изголятся ?

Наверно если подумать, то и еще варианты найдутся.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Сообщение Дед Пахом »

Утро вечера мудренее... А чем chr(10) chr(13) помешали? (кстати, наоборот, 0D0A) Я что-то не видел ни одного xml, который бы был без разбивки на строки, и именно по 0D0A (для Windows, естественно)
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Edit XML file

Сообщение Admin »

seawolf писал(а):Уважаемые коллеги,
Столкнулся с проблемой: нужно в выгруженный из базы данных из blob XML файл дописать пару строк из программы. На уровне ASCII не получается (похоже автоматом всегда дописывается chr(10) chr(13)) , библиотека IQXML вроде тоже не проходит хотя она хорошо парсит и пишет в новый файл. Кто что посоветует? C6.3 9055
Используй драйвер DOS.
Он позволяет сделать именно то что тебе нужно.
Открыл файл. Дописал то что нужно и закрыл.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Сообщение Admin »

Вот пример:

Код: Выделить всё

               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
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
seawolf
Старожил
Сообщения: 217
Зарегистрирован: 08 Июль 2005, 11:23
Откуда: St. Petersburg

XML

Сообщение seawolf »

Спасибо!
Проблема оказалась в том что XML идет UTF-16 и поэтому дописать прямо в лоб строку текста не получалось! Придеться искать средство перевести строку в 16 разрядов. В былые времена это было 5 clarione HEXEDIT demo. В 6 пока не нашел!
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Сообщение Admin »

Переведи строку в UTF посредством Windows API с спокойно допиши ее в конец файла. Какие проблемы?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
seawolf
Старожил
Сообщения: 217
Зарегистрирован: 08 Июль 2005, 11:23
Откуда: St. Petersburg

API?

Сообщение seawolf »

А можно название API функции ?
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Сообщение Admin »

Может быть народ кинет технологию преобразования ASCII в UTF-16 !?
Я сам такого не делал.
Могу предложить почитать:
http://msdn2.microsoft.com/en-us/library/ms776413.aspx
или погуглить ...

Как вариант - если нужно добавлять всегда одно и тоже в конец файла:
1. Создаешь в редакторе который может править UTF-16 текст который нужно вставить в конец файла.
2. Смотришь коды строки и собираешь из них данные для Кларион, типа var ='<10><13><232><123>' и т.д.
3. Записываешь эту строку в файл
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Сообщение Дед Пахом »

Завтра придётся xml в UTF-8 или не дай бог Windows-1251 дописывать, и что тогда? Надо юзать какие-либо стандартные средства, а не лисапед изобретать.
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: API?

Сообщение Admin »

seawolf писал(а):А можно название API функции ?
Вот смотри что в ClaList подсказали:

> Как произвести конвертацию подскажет кто нибудь?
> Нужно человеку на форуме:
> 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 и есть то, что надо...

-------------------------
С уважением,
Юрий Философов
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
seawolf
Старожил
Сообщения: 217
Зарегистрирован: 08 Июль 2005, 11:23
Откуда: St. Petersburg

OK

Сообщение seawolf »

Всем спасибо.
Пока проблему решили дописывая все руками (не так много файлов) и пихая в базу уже готовое и проверенное. Если придеться поюзать эти функции напишу результат !
seawolf
Старожил
Сообщения: 217
Зарегистрирован: 08 Июль 2005, 11:23
Откуда: St. Petersburg

Сообщение seawolf »

Отвечу сам себе и остальным. Для UTF-16 работает следующая схема (которая уже предлагалась). Строка которую надо туда дописать (в моем случае в начало файла) должна быть модифицирована и между символами требуется вставить <00>. После чего записываем в файл.

Пример:
Имеем строку которую надо записать 'TEST'
Пишем в файл 'T' & <00> & 'E' & <00> & 'S' & <00> & 'T'

Это работает!
Ответить