Есть ли в delphi простой способ преобразовать массив строк в tstringlist?
массив delphi преобразования строкового списка в строковый список
Ответы (2)
Создав список строк, вы можете просто вызвать AddStrings()
.
Или для более старых версий Delphi, которые не поддерживают AddStrings()
перегрузки, которые принимают массивы, вы можете свернуть свои собственные.
function StringListFromStrings(const Strings: array of string): TStringList;
var
i: Integer;
begin
Result := TStringList.Create;
for i := low(Strings) to high(Strings) do
Result.Add(Strings[i]);
end;
Использование параметра открытого массива обеспечивает максимальную гибкость для вызывающего.
person
David Heffernan
schedule
04.05.2011
Обратите внимание, что это работает только в D2009 и новее (где доступны дженерики). Тот же код типа в D2007 (который поддерживает синтаксис конструктора динамического массива) не работает с несовместимыми типами E2010: 'TStrings' и 'TStringArray', где
type TStringArray = array of string
, и используется как SA := TStringArray.Create('One', 'Two', Three');
, а TStringList.AddStrings вызывается как SL.AddStrings(SA);
- person Ken White; 04.05.2011
Последнее обновление хорошо работает на всех версиях Delphi, даже на тех, у которых нет динамических массивов (!)
- person David Heffernan; 10.12.2012
Для предварительных общих версий Delphi вы можете использовать что-то вроде этого:
type
TStringArray = array of string;
procedure StringListFromStrings(const StringArray: TStringArray;
const SL: TStringList);
var
// Versions of Delphi supporting for..in loops
s: string;
// Pre for..in version
// i: Integer;
begin
// TStringList should be created and passed in, so it's clear
// where it should be free'd.
Assert(Assigned(SL));
// Delphi versions with for..in support
for s in StringArray do
SL.Add(s);
// Pre for..in versions
// for i := Low(StringArray) to High(StringArray) do
// SL.Add(StringArray[i]);
end;
person
Ken White
schedule
04.05.2011
@ Уоррен: Спасибо. Некоторые из нас застряли в их использовании, потому что у нас есть проекты, которые не нуждаются в поддержке Unicode (в частности, в домашних приложениях) и поэтому не могут оправдать работу по их преобразованию в новые версии Delphi (и не могут оправдать расходы на сами новые версии, потому что власть имущие не заботятся о Юникоде, дженериках и т. д.).
- person Ken White; 04.05.2011
один комментарий: параметр открытого массива, а не динамический массив, дает вызывающей стороне большую гибкость без каких-либо затрат.
- person David Heffernan; 05.05.2011
@ Дэвид: Верно. Я специально обращался к массиву строк OP, который, как мне показалось, был ссылкой на динамический массив. @ Уоррен: Не хочу сказать, что я не знаком с новыми версиями Delphi. :) у меня XE; просто не могу использовать его столько, сколько хотелось бы, так как в настоящее время у меня есть более 40 приложений в D2007, которые, вероятно, не будут обновлены до Unicode в ближайшем будущем.
- person Ken White; 05.05.2011