String

Описание

Тип данных String представляет текст как последовательность знаков Юникод. Каждая строка представляет собой упорядоченный массив из нуля или более символов Юникод (т.е. 2-байтовых целых чисел без знака), называемых элементами строки. Элементы строки нумеруются, начиная с нуля. Длина строки - это количество элементов в ней; пустая строка состоит из нуля элементов.

Строка может содержать до 2 Гб данных.

Примечание. Константы, заключенные в двойные кавычки, определяются типом String ("Любой текст"), а константы, заключенные в апострофы - типом Char ('A'). Наследование от класса базового типа String запрещено.

Комментарии

Операции со строками

Для строковых переменных доступны операции сложения ("+") и сравнения (">", "<", ">=", "<=", "<>"). Результатом сложения двух строк S и S1 будет новая строка, в которой после символов строки S идут символы строки S1.

Результатом сравнения двух строк является логическое значение. Операция сравнения производится над числовыми значениями символов Юникод, входящих в строку. В какой строке сумма числовых значений символов больше, та строка и является большей.

Для сравнения строк с учетом их синтаксических особенностей (регистр букв, порядок символов) можно использовать один из объектов сравнения, доступных в классе Comparer.

Допустимый размер значений переменных

2 Гб - это максимальный, теоретически возможный размер, который могут хранить в себе строковые переменные. Данный размер обусловлен максимальным размером длины строки, установленным для типа String - 4 байта. На практике максимальный размер значения, которое может храниться в строковой переменной, зависит от множества факторов.

В архитектуру операционных систем заложено резервирование части оперативной памяти на нужды самой операционной системы и части для нужд пользовательских приложений. 32-битные процессы используют 32-битные указатели на адреса в виртуальной памяти, которые создают абсолютный верхний предел в 4 Гб (2 ^ 32-ой степени). По умолчанию 32-битная версия Windows разделяет адресное пространство поровну между системой и приложениями, создавая границу в 2 Гб для каждого. (При определенных настройках можно достичь соотношения 1/4 на нужды ОС и 3/4 на нужны приложений). 64-битные процессы используют 64-битные указатели, так что их теоретическое максимальное адресное пространство равно 16 экзабайтам (2 ^ 64-ой степени). Однако, Windows не делит адресное пространство равномерно между активными процессами и системой, а вместо этого определяет область в адресном пространстве для процессов и других системных ресурсов памяти. В 64-битной версии Windows для пользовательских приложений доступно использование адресного пространства в 8192 Гб (8 Тб).

Для каждого приложения операционная система выделяет непрерывный блок памяти, требуемый для работы. При каких-либо операциях с данными также резервируются непрерывные блоки памяти для временных переменных, используемых при вычислениях.

В реальных условиях работа запущенных приложений, служб приводит к фрагментации памяти. Это в свою очередь проводит к ограниченному количеству и объему доступных свободных непрерывных блоков памяти. В ситуациях, когда приложение достигает предела доступного адресного пространства памяти, либо когда ОС по каким-либо причинам не может выделить приложению необходимый объем памяти, генерируется исключительная ситуация «Недостаточно памяти».

Все эти ограничения приводят к тому, что на разных ПК с различными ОС всегда будет различным доступный объем памяти, который сможет использовать продукт «Форсайт. Аналитическая платформа». Это в свою очередь накладывает ограничение на максимально доступный размер данных, который можно хранить в переменных. Необходимо избегать операций с большими объемами данных, оптимизируя алгоритмы для работы с отдельными частями данных.

Операции

Для двух строковых переменных доступны операции отношения и арифметическая операция сложения(+). Результатом сложения двух строк является строковое значение.

Пример

Sub SampleString;
Var
    s1, s2: String;
    c: Char;
Begin
    s1 := "Program";
    s2 := "Pro" + "gram";
    Debug.WriteLine(s1 = s2); //Сравнение строк по содержимому
    Debug.WriteLine((s1 As Object) = (s2 As Object)); //Сравнение строк как двух объектов
    c := s1.Chars(0);
    s1 := "Знак" + Char.Chr(160) + #169; //160-код пробела, 169-код знака ©
    Debug.WriteLine(s1);
End Sub SampleString;

См. также:

Типы данных | Класс String