Какой может быть максимальная длина строки
ОченьДлиннаяСтрока = «00»;
Для ч = 1 По 26 Цикл
ОченьДлиннаяСтрока = ОченьДлиннаяСтрока + ОченьДлиннаяСтрока;
КонецЦикла;
У меня на 26 вылетает — это примерно 134Мб
Длина строки 2^26
67 108 864 символов
(1) У него начинается уже с двух нулей, т.е. 2^27
в чем вопрос?
(4) Видимо, ни в чем. Просто решил интеллектом блеснуть, мол я знаю, что есть такая штука как степень.
Не просто хочу понять ограничения строки в 1с, памятью только ограничено доступной для 32 битного приложения 2 Гб или же чем то другим.
Получается чем то другим?
Изначально столкнулся с тем что Base64Строка() сваливался на относительно небольших размерах. А это используется при передачи бинарных данных через веб сервисы. То есть выходит что размер файла косвенно ограничен длинной строки которую 1с поддерживает. Далее ограничение функции Base64Строка() но её можно обойти свою написать например, а далее уже смотреть у веб сервиса параметр строковый какую строку проглотит.
В ЖКК пишут что строка — неограниченной длины, а таки выходит что чем то ограничена и даже не доступной памятью.
Ну да, а тот как же строки длиннее 134 МБ передавать, да, согласен.
Кстати интересно еще запустить проверку из (0) на сервере 64 бит свалится или нет.
в пятницу надо было, зачем сейчас то. практической пользы 0 целых 0 десятых, большие объёмы хранить явно не в строках, а двоичные данные в хранилище значений
(13) Хранить да в хранилище, но передача то в веб сервисах идет преобразованием в строку и передачей строки.
Есть такой тип значения base64Binary (http://www.w3.org/2001/XMLSchema)
(14) И кто в здравом уме и твердой памяти будет передавать 100 метров строкой через веб-сервис?
Если файл очень большой, то его можно порезать на части и передавать каждую часть в отдельном запросе.
Просто, если при передаче нескольких сотен мегабайт связь рвётся, то вы передаёте всё с начала, а если передача идёт по кускам, то передавать заново нужно только непрошедшие куски.
(0) Нету куска памяти подходящего размера, к примеру.
(17) Все так но вопрос о ограничения 1с и особенностях которые в документации не описаны.
(18) Может и так а может и нет, кто его знает в документации об этом никакой информации нет.
А вот у меня на пустой базе нормально отработало
Для ч = 1 По 28 Цикл
и заняло 1.1 гиг.
При проектировании веб сервиса лично вы чем будете ограничивать размер строки или передаваемого/принимаемого файла?
Причем то, что будут вам пихать в веб сервис вы не сможете ограничить заранее, предпроверок нет.
я в школе на олимпиаде, в финале видал подобную задачу:
Есть строка, состоящая из последовательности
1. а
2. aab
3. aabaabc
4. aabaabcaabaabcd
и т.п.
Нужно вычислить какой символ будет находиться в заданной позиции справа налево после того как будут записаны все символы англ алфавита т.е. программа спрашивает число, и выводит в ответ символ. например: если введешь 1 то ответ z
В документации к php, например, написано, что строка может быть любой длины, но с учётом свободной памяти.
Если вы только что запустили 1С, то у вас свободной памяти будет порядка 2 Гб, но как только начинается работа — память становится фрагментированной (точнее не сама память, а адресное пространство процесса).
Как это достигается:
Выделяем кусок 100 Мб, потом выделяем кусок 1 кб, потом освобождаем 100 Мб и выделяем 101 Мб, потом опять 1 Кб
Ну и повторяем, пока хватит памяти — в результате имеем, что у нас будет множество кусков по 1 кб на расстоянии 1 Мб.
В результате, при очередной попытке выделить 200 Мб мы получим отказ, хотя реально памяти будет использоваться чуть больше 1 Мб.
Поэтому, работа с большими строками очень нежелательна, так как может привести к фрагментации памяти — особенно операции сложения строк, когда вместо увеличения блока под одну строку мы выделяем новый блок.
§28 ГДЗ Семакин 10 класс (Информатика)
3. Составьте программу получения из слова «дисковод» слова «воск», используя операцию сцепления и функцию Сору.
4. Составьте программу получения слова «правило» из слова «операция», используя процедуры Delete, Insert.
5. В данном слове замените первый и последний символы на символ
6. В данном слове произведите обмен первого и последнего символов.
7. К данному слову присоедините столько символов сколько в нем имеется букв (например, из строки ’УРА’ надо получить ‘УРА. ‘).
8. В данной строке вставьте пробел после каждого символа.
9. Переверните введенную строку (например, из ‘ДИСК’ должно получиться КСИД).
10. В данной строке удалите все пробелы.
11. Строка представляет собой запись целого числа. Составьте программу ее перевода в соответствующую величину целого типа.
*Цитирирование задания со ссылкой на учебник производится исключительно в учебных целях для лучшего понимания разбора решения задания.
*размещая тексты в комментариях ниже, вы автоматически соглашаетесь с пользовательским соглашением
Популярные решебники 10 класс Все решебники
Власенков 10-11 класс
Власенков, Рыбченская
Атанасян 10-11 класс
Атанасян, Бутузов
New Millennium
Казырбаева, Дворецкая
Баранова, Дули, Копылова
Сахаров, Загладин
Баранова, Афанасьева, Михеева
Ответы на вопросы
Практические работы
Работа 1.1. Шифровани.
©Reshak.ru — сборник решебников для учеников старших и средних классов. Здесь можно найти решебники, ГДЗ, переводы текстов по школьной программе. Практически весь материал, собранный на сайте — авторский с подробными пояснениями профильными специалистами. Вы сможете скачать гдз, решебники, улучшить школьные оценки, повысить знания, получить намного больше свободного времени.
Главная задача сайта: помогать школьникам и родителям в решении домашнего задания. Кроме того, весь материал совершенствуется, добавляются новые сборники решений.
Теоретический материал (Паскаль)
Строка. Тип данных string. Строковые переменные, их описание. Длина строки. Операции над строками
Строка (string) — это последовательность литер. Литерные строки уже использовались нами в качестве аргументов операторa write при изучении темы «Ввод-вывод». Теперь познакомимся с ними подробнее.
Тип данных (string) определяет строки с максимальной длиной 255 символов. Переменная этого типа может принимать значения переменной длины.
MaxLine : string; City : string[30] |
Строковая переменная может иметь атрибут длины, определяющий ее максимальную длину.
Текущая длина строковой переменной может быть определена с помощью встроенной функции Length. Для заданного значения типа string эта функция возвращает целое значение, показывающее количество литер в строке.
Выражения, в которых операндами служат строки, называются строковыми выражениями.
Над строками определены следующие операции:
1. Операция конкатенации (+) применяется для сцепления нескольких строк в одну.
Например,
SumStr := ‘Турбо ‘+’Паскаль ‘+’7.0’
Если строки имеют различную длину, но в их общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная.
Строки считаются равными, если они совпадают по длине и содержат одни и те же символы на соответствующих местах в строке.
Для присваивания строковой переменной результата строкового выражения используется оператор присваивания. Если значение переменной после выполнения оператора присваивания превышает по длине максимально допустимую при описании величину, то все лишние символы справа отбрасываются.
Допускается смешение в одном выражении операндов строкового и символьного типа.
К отдельным символам строки можно обратиться по номеру (индексу) данного символа в строке.
Например, чтобы обратиться к третьему символу строки SumStr надо записать SumStr[3]. Запись SumStr[0] дает значение текущей длины строки.
Для эффективного программирования алгоритмов обработки текстов необходимо хорошо понимать внутреннюю структуру представления строк в памяти. Строки реализованы достаточно просто. Для хранения строковых переменных выделяется количество байтов памяти, на единицу большее максимальной длины строки. Начальный байт этой памяти отводится для хранения текущей длины строки, следующие байты — для символов самой строки. Так как элементы строк стандартно нумеруются целыми числами, начиная с единицы, байт с длиной строки можно считать нулевым ее элементом. Такая структура памяти допускает прямой доступ к ее элементам.
Важно отметить, что имеется возможность динамически управлять текущей длиной строки. Следующая программа показывает автоматическое изменение длины строки после тех или иных операций с нею. Обратите внимание, что общий (определяемый с помощью стандартной функции SizeOf) размер памяти, отведенной для хранения строки все время остается неизменным.
Program StringLength; Var S : string; Begin S:=»; writeln (S,’ ‘,SizeOf(S),’ ‘,Length(S)); S:=’Пример длинной строки’; writeln (S,’ ‘,SizeOf(S),’ ‘,Length(S)); Delete(S,7,8); writeln (S,’ ‘,SizeOf(S),’ ‘,Length(S)); S:=S+’ символов’; writeln (S,’ ‘,SizeOf(S),’ ‘,Length(S)); End. |
Внимание! При решении задач со строковыми переменными Вы можете столкнуться с распространенной трудно обнаруживаемой ошибкой, когда после присваивания некоторым элементам строки символов ни содержимое, ни длина строки не изменяются. Разберемся, с чем это связано.
Очень важно понимать, что при доступе к некоторому элементу строки значение ее текущей длины не проверяется. Это иллюстрирует следующая программа:
Program StringElements; Var S : string; Begin S:=’ABCD’; writeln (S,’ ‘,Length(S)); S[5] := ‘E’; writeln (S,’ ‘,Length(S)); End. |
Присваивание пятому элементу строки некоторого значения не изменяет длину строки, что подтверждает вывод на экран ее содержимого и длины (конечно само присваивание реально произошло, но на значение текущей длины строки в нулевом байте это никакого влияния не оказало). Работа с элементами строки без учета ее текущей длины и является ошибкой программиста. Посмотрите следующую программу:
Program StringElements2; Var Str : string[26]; i : integer; Begin Str:=’A’; for i := 1 to 26 do Str[i] := Chr (Ord(‘A’)+i-1); writeln(Str); End. |
Предполагается, что данная программа должна сформировать строку из 26 символов, содержимым которой является последовательность заглавных букв латинского алфавита. Однако вызов процедуры writeln показывает, что содержимым переменной Str будет строка из одного символа ‘А’. Природа совершенной ошибки заключается в том, что присваивание значений элементам строки не влияет на текущую длину, которая была установлена равной 1 при первом присваивании. Поэтому правильной будет следующая программа:
Program stringElements3; Var Str : string[26]; i : char; Begin Str:=»; for i := ‘A’ to ‘Z’ do Str := Str + i; writeln(Str); End. |
Операция конкатенации, как и все стандартные операции, работающие со строками, в отличие от поэлементного присваивания, изменяет длину строки, что дает корректный результат. Кроме того, вторая программа работает непосредственно с символами букв. Наконец, не следует забывать инициализировать строку перед ее заполнением (первый оператор программы). В противном случае, так как начальная длина строки является неопределенной, можно получить произвольный результат; не стоит рассчитывать на то, что в нулевом байте стоит ноль.
Для обработки строковых данных можно использовать встроенные процедуры и функции:
-
Delete (Str, Poz, N) — удаление N символов строки Str, начиная с позиции Poz.
Какой может быть максимальная длина строки
На этом шаге мы рассмотрим короткие строки .
- общую длину строки , которая характеризует размер памяти, выделяемый короткой строке при описании;
- текущую длину строки (всегда меньше или равную общей длине), которая показывает количество смысловых символов короткой строки в каждый конкретный момент времени.
В ShortString -строках текущая длина строки указывается в нулевом (то есть имеющем индекс 0) элементе строки. В этот элемент записывается символ, код которого равняется значению текущей длины. Нулевой элемент строки при этом сделан невидимым для пользователя, однако использовать его в программах (записывать в него и извлекать из него информацию) хотя не рекомендуется, но в принципе допускается. Поскольку каждый символ занимает один байт памяти, то, при таком способе указания текущей длины, максимально допустимая длина строки будет ограничена максимальным значением, которое можно записать в один байт памяти. То есть максимальная текущая длина строки может быть не более 255 символов.
Преимуществом такого способа представления строк является чрезвычайно простой доступ к значению текущей длины строки, что позволяет эффективно выполнять работу со строками. Недостаток состоит в ограничении на максимальную длину строки.
Рис.1. Представление в памяти короткой строки
Напомним, что этому способу реализации строк соответствует определенный тип String при выключенной директиве . Onpеделяемая при описании общая длина строки указывается в квадрат скобках.
var S1 : String [10] ; S2 : String [128] ; Smax1 : String; Smax2 : ShortString;
Если длина в описании типа String не указывается, то по умолчанию принимается максимальная длина, равная 255 символам.
Замечание . Предопределенный идентификатор ShortString всегда соответствует короткой строке максимальной длины в 255 символов и указания какой-либо другой длины не допускает.
На следующем шаге мы рассмотрим длинные строки .