Я хочу, чтобы иметь возможность использовать длинную строку (не более 100000 знаков). Насколько я знаю, типичная строковая переменная может содержать только до 256 символов. Есть ли способ хранить такую длинную строку?Длинные строки в pascal
ответ
Строки старого стиля (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;
Вы можете использовать AnsiString
type.
При использовании 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
- 1. длинные строки в легенде()
- 2. Длинные строки в LaTeX
- 3. отформатированный ввод строки в Pascal
- 4. Выделите слишком длинные строки
- 5. Показать очень длинные строки
- 6. длинные строки целочисленной арифметики
- 7. Слишком длинные строки
- 8. Сравните две длинные строки
- 9. Оберните длинные строки в Python
- 10. Игнорировать длинные строки в silversearcher
- 11. Длинные строки в отчетности данных
- 12. Длинные строки и .find
- 13. Emacs. Усекать длинные строки
- 14. Найти самые длинные строки
- 15. Длинные строки ввода пользователем
- 16. Длинные числовые строки
- 17. Получить целую часть строки в Pascal
- 18. Отладчик XCode: отображать длинные строки
- 19. findstr: слишком длинные строки поиска
- 20. Найти самые длинные повторяющиеся строки?
- 21. Самые длинные строки из списка
- 22. Длинные строки кода с читабельностью
- 23. Длинные строки не отображаются правильно
- 24. Сравнивая длинные строки с пробелами
- 25. PHP Написание длинные строки на отдельные строки
- 26. Длинные строки в переменных в jade
- 27. Хранить длинные строки со Squeryl
- 28. UIActionSheet обрезает длинные строки! Альтернативы?
- 29. Обводка строки кода - как обрабатывать длинные строки
- 30. Почему GetTextFromPage из iTextSharp возвращает более длинные и длинные строки?
fpc и objfpc по умолчанию для шортстинга. (но использование ansistring возможно через {$ H +}, и шаблоны Lazarus обычно делают это). В версиях внешних линий поддерживается режим $ mode delphiunicode, где string = unicodestring, но до сих пор адаптированы только процедуры ввода-вывода файлов системы и sysutils. –
@MarcovandeVoort: Я отредактировал эту информацию. Спасибо, что дали мне знать; Я не использовал FPC в течение некоторого времени и думал, что они еще ближе к Delphi по умолчанию. –
Они включены, если вы включите режим delphi ($ mode delphi in (each) source или -Sd в cmdline, первый обычно скрывается в центральных .inc-файлах в большом pacakges с открытым исходным кодом). Но по умолчанию режим - это режим fpc, который является очищенным диалектом Turbo Pascal (без 16-битбизмов) с некоторыми более процедурными расширениями Delphi. mode objfpc добавляет классы и большинство других старых функций Delphi, но имеет некоторые специфические особенности FPC. –