Страница 1 из 1
Научите пользоваться динамической строкой!!
Добавлено: 26 Июнь 2015, 23:10
ingasoftplus
вычитал следующее
Как минимум с версии Клариона 5.5 существует интерфейс IDynStr, который как раз и служит для цели создания динамических строк. Описание методов интерфейса вы можете найти в директории LibSrc в файле DynStr.inc, в стандартной документации описание отсутствует. Использовать интерфейс достаточно просто:
Код: Выделить всё
DS &IDynStr ! описание объекта
code
DS &= NewDynStr() ! Обязательно используется ф-ия NewDynStr
DS.Cat('динамическая строка') ! создали строку и заполнили ее данными
message(DS.Str()) ! Показали строку
DisposeDynStr(DS) ! уничтожили строку
только вот не пойму - как мне простое действо сделать, а именно сконкатенировать текущую дин строку с новой, типа этого
т.е. в цикле мне надо наращивать содержимое дин строки добавляя в нее информацию.
Научите пользоваться динамической строкой!!
Добавлено: 26 Июнь 2015, 23:43
ingasoftplus
похоже то что надо!
Cat (STRING inDataString) - заполнить строку данными
Метод заполняет строку указанными данными. Если строка уже содержит данные, то новые данные будут добавлены в конец старых данных. Длина строки при этом увеличится.
Код: Выделить всё
DS &= NewDynStr() ! создали объект
DS.Cat('Динамически созданная строка') ! наполнили содержанием
message(DS.Str(),1) ! показали
DS.Cat('|вторая строка') ! добавили в конец строки
message(DS.Str(),2) ! показали
DisposeDynStr(DS) ! уничтожили объект
вопрос снимается!!!
http://www.clarionlife.net/?file_id=2289
только скорее
Научите пользоваться динамической строкой!!
Добавлено: 26 Июнь 2015, 23:58
ingasoftplus
цепяю перекомпилированный хелп файл

а то оригинальный у меня крокозямбы показывает
Научите пользоваться динамической строкой!!
Добавлено: 27 Июнь 2015, 0:08
Дед Пахом
я где-то тут класс-обёртку над IDynStr уже выкладывал, в частности, он позволяет не заботиться о DISPOSE(). Прицепил тут, может пригодится.
Научите пользоваться динамической строкой!!
Добавлено: 27 Июнь 2015, 0:16
ingasoftplus
спасибо!!
Научите пользоваться динамической строкой!!
Добавлено: 27 Июнь 2015, 14:18
Губин Игорь
А можно пример области применения? Что-то я пытаюсь представить где можно это использовать...
Научите пользоваться динамической строкой!!
Добавлено: 27 Июнь 2015, 15:29
Admin
У меня почти все применение такое. Бывает на 2-3 экрана...
Код: Выделить всё
DS.Kill()
DS.Cat(' SELECT ')
DS.Cat(' G.GoodsID, ')
DS.Cat(' CF.CustomFieldValue ')
DS.Cat(' FROM ')
DS.Cat(' Goods G ')
DS.Cat(' JOIN GoodsLink GL ON GL.GoodsID = G.GoodsID AND GL.LinkEnabled = 1 AND GL.CategoryID = ' & CategoryList.CategoryID)
DS.Cat(' JOIN Category C ON C.CategoryID = GL.CategoryID AND C.ShopID = ' & SL:ShopID)
DS.Cat(' LEFT JOIN CustomFields CF ON CF.GoodsID = G.GoodsID ')
DS.Cat(' WHERE ')
DS.Cat(' CF.CustomFieldName = '''&CLIP(CustomFieldList.FieldName)&''' ')
DS.Cat(' ORDER BY ')
DS.Cat(' G.GoodsID ')
IF MAVLOAD(DS.Str(), CustomValuesList)
MAVSHOWERROR()
END
Научите пользоваться динамической строкой!!
Добавлено: 27 Июнь 2015, 15:35
Губин Игорь
Admin писал(а): У меня почти все применение такое. Бывает на 2-3 экрана...
Ну, может быть... Спасибо На 2-3 экрана у меня нет, но можно попробовать расшить пару узких мест, где я просто закладываю строку с запасом
Научите пользоваться динамической строкой!!
Добавлено: 27 Июнь 2015, 16:38
Дед Пахом
Admin писал(а): У меня почти все применение такое. Бывает на 2-3 экрана...
Потом это можно всё ужать, заменив серию пробелов на один: DS.Replace(' ', ' ')
Научите пользоваться динамической строкой!!
Добавлено: 27 Июнь 2015, 16:40
Admin
Дед Пахом писал(а): Потом это можно всё ужать, заменив серию пробелов на один: DS.Replace(' ', ' ')
Для SQL запросов большого смысла нет, хотя да - можно.
Научите пользоваться динамической строкой!!
Добавлено: 27 Июнь 2015, 23:21
Yufil
У меня класс Cstr
https://mega.co.nz/#!RlAilJIT!2hvwWBkAn ... J3FmCLcmvw круче
Всё-таки, внутре хранится нормальная строка.
Научите пользоваться динамической строкой!!
Добавлено: 30 Июнь 2015, 1:01
Aragorn
У меня класс Cstr круче
фурычит, подтверждаю

А вот что, все-таки, быстрее -
или
Код: Выделить всё
Str[Len(Clip(Str)) : Len(Clip(Str)) + 3] = 'abc'
???
Научите пользоваться динамической строкой!!
Добавлено: 30 Июнь 2015, 2:00
Дед Пахом
Aragorn писал(а): Str[Len(Clip(Str)) : Len(Clip(Str)) + 3] = 'abc'
можно ещё вот так выежнуться:
Код: Выделить всё
Str[Len(Clip(Str)) : Len(Clip(Str)) + sqrt(9)] = '<61h><62h><63h>'
Научите пользоваться динамической строкой!!
Добавлено: 30 Июнь 2015, 10:13
Yufil
Ну, SQL-запросы разные бывают, иногда и по несколько страниц текста.
Так обидно бывает, когда ошибка в запросе из-за того, что десятка-другого байтов не хватает
А так красота...
Код: Выделить всё
Req Cstr
....
Req.Set('Select .... ')
Req.Cat('<13,10>From .... ')
Req.Cat('<13,10>Where .... ')
Loop ...
Req.Cat( ' and ' .... ' or ' ....)
End
File{Prop:SQL} = Req.S
Примерно так же с XML
Код: Выделить всё
Req.Set('<?xml version="1.0" encoding="UTF-8" ?>')
Loop Q# = 1 to records(Q)
Get(Q,Q#)
Req.cat('<hs name="' & ansi2Html( Q:Name) & '" topic="' & ansi2html(Q:topic) & '" /> ')
End
Req.toUtf8()
Req.SaveToFile('file.xml')
А если надо большую кучку текстовых файлов пережевать - просто никак иначе.