• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Как Посчитать Размер Строки В Байтах?

  • Автор темы Serduko
  • Дата начала
S

Serduko

У меня есть массив строк, которые я хочу добавить в множественное поле. Но поскольку поле ограничено размером 32 кб, то в случае слишком большого массива, можно потерять информацию. Подскажите как посчитать размер строк в байтах, хочется это сделать до того как добавлять в поле? Возможно это Len, но при добавлении в поле, размер поля увеличивается несоразмерно со строкой, поэтому не уверен. Знаю, что размер поля можно посчитать (Valuelength), но не хочется загружать систему, поскольку придется добавлять каждую ячейку в поле отдельно, а потом проверять ее размер.
 

garrick

Lotus Team
26.10.2009
1 351
151
BIT
188
Len - это длина строки в символах, размер каждого символа в байтах зависит от кодировки. Нужно длину строки умножить на кол-во байт в символе (2 или 4 не помню точно) в зависимости от от вашей кодировки.
 
S

Serduko

А RichText не подойдет?

Думал об этом, интерактивность сложно реализуема.

Len - это длина строки в символах, размер каждого символа в байтах зависит от кодировки. Нужно длину строки умножить на кол-во байт в символе (2 или 4 не помню точно) в зависимости от от вашей кодировки.

Ansi, один байт. Вероятно, все таки поле хранит доп. информацию, наверно, посчитать сколько строка займет места в поле невозможно без добавления.
 

garrick

Lotus Team
26.10.2009
1 351
151
BIT
188
Ansi - на сколько я понимаю, это только латинские буквы, у вас скорее всего unicode.
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
Serduko
Интерактивность? Какого рода?
Если просто загнать и максимальная функциональность: редактирование, копирование, вставка. RT вполне подойдет.
Отображать в виде, поиск по значению в базе: не подойдет...
Если загонять в многозначное текстовое, я бы предварительно весь этот текст обработал: убрал бы пустые сроки, запрещенные символы(неразрывные пробелы, лишние пробелы и т.д.) Это часто бывает при вставке из email.
Есть еще вариант... подсчитать, но совсем дикий) Записать в файл по байтам весь текст и взвесить.
Txt файл хранит только текст, размер пустого файла: 11 байт (если не путаю), а размер пустого word 11Кб

И так, инетерсно, если текст окажется больше, что делать будете?
 
S

Serduko

Serduko
Интерактивность? Какого рода?
Если просто загнать и максимальная функциональность: редактирование, копирование, вставка. RT вполне подойдет.
Отображать в виде, поиск по значению в базе: не подойдет...
Если загонять в многозначное текстовое, я бы предварительно весь этот текст обработал: убрал бы пустые сроки, запрещенные символы(неразрывные пробелы, лишние пробелы и т.д.) Это часто бывает при вставке из email.
Есть еще вариант... подсчитать, но совсем дикий) Записать в файл по байтам весь текст и взвесить.
Txt файл хранит только текст, размер пустого файла: 11 байт (если не путаю), а размер пустого word 11Кб

И так, инетерсно, если текст окажется больше, что делать будете?
Это некоторое подобие реляционных таблиц. Строка обработана, удалены лишние символы и пр., содержит данные с разделителем.
Соответственно, программа активно работает с этими данными.

Если текст будет больше 32, то программа автоматически переносит его на следующее поле (количество полей - любое, просто передаю их в массиве в функцию), ну а если все равно не влазит, тогда массив строк обрезается и выдается ошибка (не критичная). Сейчас массив строк обрезаю "на глаз", но хотелось бы большей эффективности.

PS благодаря ООП, если будет связь с SQL, с мин затратами переведу на него.

Добавлено:
Хранить XML в RTF поле? Удобно разбирать потом будет.
Хм., интересно. Вот только вопрос, как интерактивно менять данные в RT поле не сохраняя и не закрывая документ?
 
S

Serduko

Ну тогда у вас по всем законам физики длина строки в символах должна совпадать с количеством байт в этой строке, т.е. используйте Len.
Должна, но не совпадает с полем, где то в 1,5 раза больше (увеличивается в арифметической прогрессии).
 

garrick

Lotus Team
26.10.2009
1 351
151
BIT
188
Хм., интересно. Вот только вопрос, как интерактивно менять данные в RT поле не сохраняя и не закрывая документ?
Не понял. А зачем? Поработайте "интерактивно", держа XML в памяти, по завершению работы сохраните результаты. Вы же не будете пользователю показывать этот XML. Зачем его обновлять в поле?
 
S

Serduko

Не понял. А зачем? Поработайте "интерактивно", держа XML в памяти, по завершению работы сохраните результаты. Вы же не будете пользователю показывать этот XML. Зачем его обновлять в поле?
Полей может быть несколько, + диалоги.
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
Ничего не понял... Несколько полей? диалоги? Оо
Вы через документ и эти поля хотите данные в SQL-ую базу транслировать "на лету" что ли?
 
S

Serduko

Ничего не понял... Несколько полей? диалоги? Оо
Вы через документ и эти поля хотите данные в SQL-ую базу транслировать "на лету" что ли?
Да, не хочу, а уже могу )). Просто я привел, вырванный из контекста, пример-проблему хранения данных в теле документа.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
Должна, но не совпадает с полем, где то в 1,5 раза больше (увеличивается в арифметической прогрессии).
нотусня хранит не вин1251, для русского, по понятным причинам (иначе былоб виндозонли)
стоит пошукать на тему
Length limit for a macro language string literal 2048 bytes Note Strings in formula language are represented internally in the LMBCS character set, which uses one byte for an ASCII character, but may require up to 4 bytes for some non-ASCII characters.
вот здесь чета есть
 
S

Serduko

нотусня хранит не вин1251, для русского, по понятным причинам (иначе былоб виндозонли)
стоит пошукать на тему

вот здесь чета есть
Нашел, спасибо (плюсомет зарядится, атблагадарю)

Код:
Function LmbcsLen(x$) As Long 
Dim session As New NotesSession, db As NotesDatabase, docTmp As NotesDocument 
Dim mime As NotesMIMEEntity, streamIn As NotesStream, streamOut As NotesStream 
Set db = session.CurrentDatabase 
Set docTmp = db.CreateDocument 
Set mime = docTmp.CreateMIMEEntity("Body") 
Set streamIn = session.CreateStream 
streamIn.WriteText x 
streamIn.Position = 0 
Call mime.SetContentFromText(streamIn, "text/plain;charset=LMBCS", ENC_NONE) 
Set streamOut = session.CreateStream 
mime.getContentAsBytes streamOut, False 
LmbcsLen = streamOut.Bytes 
End Function

Теперь надо подумать, целесообразно ли пользоваться этим "извратом", либо искать другой способ отталкиваясь от этого, либо забить. :)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
для САПИ мона так
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
еще ПДФ интересный
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!