0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 184
1

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

26.01.2014, 09:36. Показов 20572. Ответов 18
Метки нет (Все метки)

У меня есть массив строк, которые я хочу добавить в множественное поле. Но поскольку поле ограничено размером 32 кб, то в случае слишком большого массива, можно потерять информацию. Подскажите как посчитать размер строк в байтах, хочется это сделать до того как добавлять в поле? Возможно это Len, но при добавлении в поле, размер поля увеличивается несоразмерно со строкой, поэтому не уверен. Знаю, что размер поля можно посчитать (Valuelength), но не хочется загружать систему, поскольку придется добавлять каждую ячейку в поле отдельно, а потом проверять ее размер.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2014, 09:36
Ответы с готовыми решениями:

Как при создании класса указать размер строки в байтах
Как при создании класса указать размер строки в байтах?

Получить размер строки в байтах
Добрый день! Имеется, например, следующая строка: int a = rand() % 1000, b = rand() % 200; string...

Как измерить размер функции в байтах?
вот есть функция. сколько байт она занимает?

Как определить размер изображения в байтах?
Как определить размер изображения в байтах?

18
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
26.01.2014, 09:50 2
А RichText не подойдет?
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 812
26.01.2014, 10:07 3
Len - это длина строки в символах, размер каждого символа в байтах зависит от кодировки. Нужно длину строки умножить на кол-во байт в символе (2 или 4 не помню точно) в зависимости от от вашей кодировки.
0
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 184
26.01.2014, 10:18 4
Цитата Сообщение от savl
А RichText не подойдет?
Думал об этом, интерактивность сложно реализуема.



Цитата Сообщение от garrick
Len - это длина строки в символах, размер каждого символа в байтах зависит от кодировки. Нужно длину строки умножить на кол-во байт в символе (2 или 4 не помню точно) в зависимости от от вашей кодировки.
Ansi, один байт. Вероятно, все таки поле хранит доп. информацию, наверно, посчитать сколько строка займет места в поле невозможно без добавления.
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 812
26.01.2014, 10:24 5
Ansi - на сколько я понимаю, это только латинские буквы, у вас скорее всего unicode.
0
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 184
26.01.2014, 10:43 6
Цитата Сообщение от garrick
Ansi - на сколько я понимаю, это только латинские буквы, у вас скорее всего unicode.
Что то новое ))

http://ru.wikipedia.org/wiki/ANSI
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
26.01.2014, 10:50 7
Serduko
Интерактивность? Какого рода?
Если просто загнать и максимальная функциональность: редактирование, копирование, вставка. RT вполне подойдет.
Отображать в виде, поиск по значению в базе: не подойдет...
Если загонять в многозначное текстовое, я бы предварительно весь этот текст обработал: убрал бы пустые сроки, запрещенные символы(неразрывные пробелы, лишние пробелы и т.д.) Это часто бывает при вставке из email.
Есть еще вариант... подсчитать, но совсем дикий) Записать в файл по байтам весь текст и взвесить.
Txt файл хранит только текст, размер пустого файла: 11 байт (если не путаю), а размер пустого word 11Кб

И так, инетерсно, если текст окажется больше, что делать будете?
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 812
26.01.2014, 11:01 8
Цитата Сообщение от Serduko
Думал об этом, интерактивность сложно реализуема.
Хранить XML в RTF поле? Удобно разбирать потом будет.
0
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 184
26.01.2014, 11:07 9
Цитата Сообщение от savl
Serduko
Интерактивность? Какого рода?
Если просто загнать и максимальная функциональность: редактирование, копирование, вставка. RT вполне подойдет.
Отображать в виде, поиск по значению в базе: не подойдет...
Если загонять в многозначное текстовое, я бы предварительно весь этот текст обработал: убрал бы пустые сроки, запрещенные символы(неразрывные пробелы, лишние пробелы и т.д.) Это часто бывает при вставке из email.
Есть еще вариант... подсчитать, но совсем дикий) Записать в файл по байтам весь текст и взвесить.
Txt файл хранит только текст, размер пустого файла: 11 байт (если не путаю), а размер пустого word 11Кб

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

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

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

Добавлено:


Цитата Сообщение от garrick
Хранить XML в RTF поле? Удобно разбирать потом будет.
Хм., интересно. Вот только вопрос, как интерактивно менять данные в RT поле не сохраняя и не закрывая документ?
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 812
26.01.2014, 11:13 10
Цитата Сообщение от Serduko
Что то новое ))

http://ru.wikipedia.org/wiki/ANSI
Ну тогда у вас по всем законам физики длина строки в символах должна совпадать с количеством байт в этой строке, т.е. используйте Len.
0
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 184
26.01.2014, 11:16 11
Цитата Сообщение от garrick
Ну тогда у вас по всем законам физики длина строки в символах должна совпадать с количеством байт в этой строке, т.е. используйте Len.
Должна, но не совпадает с полем, где то в 1,5 раза больше (увеличивается в арифметической прогрессии).
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 812
26.01.2014, 11:28 12
Цитата Сообщение от Serduko
Хм., интересно. Вот только вопрос, как интерактивно менять данные в RT поле не сохраняя и не закрывая документ?
Не понял. А зачем? Поработайте "интерактивно", держа XML в памяти, по завершению работы сохраните результаты. Вы же не будете пользователю показывать этот XML. Зачем его обновлять в поле?
0
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 184
26.01.2014, 12:49 13
Цитата Сообщение от garrick
Не понял. А зачем? Поработайте "интерактивно", держа XML в памяти, по завершению работы сохраните результаты. Вы же не будете пользователю показывать этот XML. Зачем его обновлять в поле?
Полей может быть несколько, + диалоги.
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
26.01.2014, 13:19 14
Ничего не понял... Несколько полей? диалоги? Оо
Вы через документ и эти поля хотите данные в SQL-ую базу транслировать "на лету" что ли?
0
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 184
26.01.2014, 13:29 15
Цитата Сообщение от savl
Ничего не понял... Несколько полей? диалоги? Оо
Вы через документ и эти поля хотите данные в SQL-ую базу транслировать "на лету" что ли?
Да, не хочу, а уже могу )). Просто я привел, вырванный из контекста, пример-проблему хранения данных в теле документа.
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
26.01.2014, 13:32 16
Цитата Сообщение от Serduko
Должна, но не совпадает с полем, где то в 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.
вот здесь чета есть http://planetlotus.org/profile... ard_100537
0
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 184
26.01.2014, 14:04 17
Цитата Сообщение от lmike
нотусня хранит не вин1251, для русского, по понятным причинам (иначе былоб виндозонли)
стоит пошукать на тему

вот здесь чета есть http://planetlotus.org/profile... ard_100537
Нашел, спасибо (плюсомет зарядится, атблагадарю)


LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
Теперь надо подумать, целесообразно ли пользоваться этим "извратом", либо искать другой способ отталкиваясь от этого, либо забить.
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
26.01.2014, 15:49 18
для САПИ мона так http://www-12.lotus.com/ldd/doc/tools/c/6....96?OpenDocument
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
26.01.2014, 15:59 19
еще ПДФ интересный http://www.bobzblog.com/tuxedoguy.nsf/dx/m...ltilanguage.pdf
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2014, 15:59

Как получить размер объекта (в байтах)?
Дает ли VB такую возможность? Заранее спасибо

Как узнать размер std::wstring в байтах?
:) ну как бэ вопрос в шапке :)

GD как узнать размер файла, в байтах, на выходе?
Всем привет! Простенький пример: Делаем привьюшку. $src = 'file.jpg'; $src =...

Как узнать размер в байтах графических объектов
Здравствуйте. Как программно узнать размер в байтах графических объектов - графических путей,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.