Строки в Delphi представляют собой последовательность символов. Можно разделить на 4 типа строки в Делфи:
- ShortString (максимальная длина – 255) используется для обратной совместимости. Нулевой символ отсутствует в конце.
- AnsiString (максимальная длина ˜2 Гб) используется для символов ANSI. Нулевой символ присутствует в конце.
- String (255 символов или до ˜2 Гб) используется для ANSI или Unicode. Нулевой символ может присутствовать или не присутствовать в конце.
- WideString (˜1 Гб) используется в серверах COM, а так же для символов Unicode. Нулевой символ присутствует в конце.
Подробнее хочу остановиться на строковых типах ShortString и AnsiString. Они различаются между собой организацией хранения в памяти. Строки типа ShortString хранят в своем нулевом байте число символов в строке, а в последующих байтах – сами символы (не более 255). Поэтому, если Q – строка типа ShortString, то Ord(Q[0]) – то же, что и Length(Q), возвращает длину строки. Присваивание значения Q[0] соответствует вызову функции SetLength, которая устанавливает длину строки.
Переменная типа AnsiString является указателем на динамически выделяемую область памяти, в которой хранится строка. Может существовать несколько переменных, которые ссылаются на одну и ту же строку. В этом случае в памяти хранится только один экземпляр строки. Это экономит ресурсы. В случае, если строка равна 0, то этот указатель равен nil и память под строку не выделяется. Если же строка не пустая, то в выделенной памяти хранится сама строка, ее длина и число ссылок (переменных) ссылающихся на данную строку. Если переменной типа AnsiString присваивается новое значение, то число ссылок в прежней строке уменьшается на единицу, а в новой – увеличивается на единицу. Когда число ссылок на строку становится равным 0, то строка уничтожается, освобождая место в памяти.
Длинные строки типа AnsiString
Переменные этого типа объявляются обычным образом:
Var Q1: AnsiString;
Q2: string;
Объявление глобальных переменных или типизированных констант можно сочетать с инициализацией, причем нулевой символ в конце строки добавляется автоматически.
Var Q1: AnsiString = ‘текст’;
Q2: string = ‘начальный тест’;
Доступ к отдельным символам строки осуществляется как к символьному массиву по индексу (индекс отсчитывается от 1, а во всех других типах длинных строк индексы отсчитываются от 0). Для строки Q1 выражение Q1[2] возвращает символ строки ‘е’ – второй символ строки. Если индекс выходит за рамки числа символов в строке, то возвращается нулевой символ ‘#0’.
Функция Length(Q1) возвращает число символов строки, не считая нулевого символа. В данном случае Length(Q1) вернет 5.
Процедура SetLength:
Procedure SetLength(var Q; NewLength: Integer);
задает новый размер NewLength строки Q. Если NewLength меньше числа символов в строке, то текст строки усекается до указанного числа символов, иначе (т. е. больше), то прежний текст сохраняется, а после него записываются нулевые символы.
Для обработки строк типа AnsiString существует ряд библиотечных функций.
. delphi максимальный размер строки максимальная длина строки в delphi равна ansistring макс длина delphi ansistring размер ansistring delphi