2013-11-24 3 views
1

Я хочу, чтобы иметь возможность использовать длинную строку (не более 100000 знаков). Насколько я знаю, типичная строковая переменная может содержать только до 256 символов. Есть ли способ хранить такую ​​длинную строку?Длинные строки в pascal

ответ

4

Строки старого стиля (Turbo Pascal или Delphi 1), теперь известные как ShortString, ограничены 255 символами (байт 0 зарезервирован для длины строки). По-прежнему это значение по умолчанию используется в FreePascal (согласно комментарию @ MarcovandeVoort ниже). Продолжайте читать, пока вы не дойдете до обсуждения и кода для AnsiString ниже. :-)

В настоящее время большинство других диалектов Pascal я знаю по умолчанию либо AnsiString (длинные строки однобайтовых символов), либо UnicodeString (длинные строки многобайтовых символов). Ни один из них не ограничен 255 символами.

Текущие версии Delphi по умолчанию равны UnicodeString как тип по умолчанию, поэтому объявление переменной string на самом деле является длинным UnicodeString. Там нет никакого практического верхнего предела длины строки:

var 
    Test: string; // Declare a new Unicode string 
begin 
    SetLength(Test, 100000); // Initialize it to hold 100000 characters 
    Test := StringOfChar('X', 100000); // Fill it with 100000 'X' characters 
end; 

Если вы хотите, чтобы заставить однобайтовые символы (но не ограничивается 255 символьных строк), используйте AnsiString (который можно установить по умолчанию string типа в FreePascal, если вы используете директиву компилятора {$H+} - благодаря @MarcovandeVoort):

var 
    Test: AnsiString; // Declare a new Ansistring 
begin 
    SetLength(Test, 100000); // Initialize it to hold 100000 characters 
    Test := StringOfChar('X', 100000); // Fill it with 100000 'X' characters 
end; 

Наконец, если вы сделать по неизвестной причине хотите использовать старый стиль ShortString, который ограничен 255 символами, объявить его как таковой , eithe г используя ShortString или старый стиль String[Size] заявление:

var 
    Test: ShortString; // Declare a new short string of 255 characters 
    ShortTest: String[100]; // Also a ShortString of 100 characters 
begin 
    // This line won't compile, because it's too large for Test 
    Test := StringOfChar('X', 100000); // Fill it with 100000 'X' characters 
end; 
+1

fpc и objfpc по умолчанию для шортстинга. (но использование ansistring возможно через {$ H +}, и шаблоны Lazarus обычно делают это). В версиях внешних линий поддерживается режим $ mode delphiunicode, где string = unicodestring, но до сих пор адаптированы только процедуры ввода-вывода файлов системы и sysutils. –

+0

@MarcovandeVoort: Я отредактировал эту информацию. Спасибо, что дали мне знать; Я не использовал FPC в течение некоторого времени и думал, что они еще ближе к Delphi по умолчанию. –

+0

Они включены, если вы включите режим delphi ($ mode delphi in (each) source или -Sd в cmdline, первый обычно скрывается в центральных .inc-файлах в большом pacakges с открытым исходным кодом). Но по умолчанию режим - это режим fpc, который является очищенным диалектом Turbo Pascal (без 16-битбизмов) с некоторыми более процедурными расширениями Delphi. mode objfpc добавляет классы и большинство других старых функций Delphi, но имеет некоторые специфические особенности FPC. –

2

При использовании Free Pascal, вам не нужно быть беспокоиться об этом. Вам нужно только вставить директиву {$ H +} в начало источника.

{$H+} 

var s: String; 

begin 
    s := StringOfChar('X', 1000); 
    writeln(s); 
end. 

Конечно, вы можете использовать {$mode objfpc} и {$coperators}. http://www.freepascal.org/docs-html/prog/progch1.html

Смежные вопросы