![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Мне в коде нужно использовать коллекции.
Пример: Код:
strArray: TArray<string> = ['Раз', 'Два', 'Три', 'Четыре', 'Пять']; P.S. У меня delphi 7. Последний раз редактировалось Katerina1993, 08.02.2021 в 19:33. |
|
#2
|
|||
|
|||
|
Ну так нет в D7 этого модуля, как, в прочем, и дженериков вообще.
Варианты: 1. Перейти на свежую версию, где они есть (есть бесплатная Community Edition, там с ограничениями, но они скорее декларативные, просто зарегистрироваться надо для получения ключа, раньше еще была бесплатная Starter Edition, но что с ней сейчас просто не знаю). 2. искать модуль для имплементации контейнеров для D7. 3. Использовать контейнеры общего назначения, как то TStringList в твоем случае. Кода будет чуть побольше, но не принципиально: Код:
var
strArray : TStringList;
procedure CreateStrArray(var cont : TStringList; items : Array Of String);
var
I : Integer;
begin
if Not Assigned(cont) Then cont := TStringList.Create;
cont.Clear;
For I := Low(items) To High(items) Do
cont.Add(items[i]);
end;Ну и в коде, где надо инициализировать твой массив пишешь: Код:
CreateStrArray(strArray,['Раз', 'Два', 'Три', 'Четыре', 'Пять']); |
|
#3
|
|||
|
|||
|
Мне нужно присвоить эту процедуру к переменной. Какой тип переменной объявить в var?
Код:
CurrentString := CreateStrArray(strArray,['Раз', 'Два', 'Три', 'Четыре', 'Пять']); Например var CurrentString: -> ? |
|
#4
|
|||
|
|||
|
Это ПРОЦЕДУРА. Она не возвращает значение. Соответственно, так писать нельзя. Для возвращаемого значения у нее есть первый параметр.
Если очень хочется иметь в виде функции, то тогда так: Код:
function CreateStrArray(items : Array Of String) : TStringList;
var
I : Integer;
begin
Result := TStringList.Create;
For I := Low(items) To High(items) Do
Result.Add(items[i]);
end;И тогда вызов: Код:
var CurrentString : TStringList; ... CurrentString := CreateStrArray(['Раз', 'Два', 'Три', 'Четыре', 'Пять']); |
|
#5
|
|||
|
|||
|
У меня тут пример есть, который тоже не работает выдает ошибку. Как нибудь массивы можно сделать по delphi 7, так как здесь тоже есть TArray<TypeString>?
Код:
var Str: PWideChar; begin Str := '"T My \" " x'; // 11 ShowMessage(Test(Str[0], Length(Str), 0).ToString); end; Код:
function Test(var Buffer; BufferLen, Offset: Cardinal): Integer;
type
TypeString = char;
var
CurrentByte: TypeString;
CurrentLen: Cardinal;
SkipDoubleQuotes: Boolean;
begin
SkipDoubleQuotes := false;
CurrentLen := Offset;
while CurrentLen <= BufferLen do
begin
CurrentByte := TArray<TypeString>(@Buffer)[CurrentLen];
inc(CurrentLen);
if SkipDoubleQuotes then
begin
case CurrentByte of
'"', '''':
begin
if TArray<TypeString>(@Buffer)[CurrentLen - 2] = '\' then
Continue;
SkipDoubleQuotes := false;
end;
end;
end
else
case CurrentByte of
#9, #10, #13, #32:
exit(CurrentLen);
'"', '''':
SkipDoubleQuotes := true;
end;
end;
exit(-1);
end;Последний раз редактировалось Katerina1993, 14.02.2021 в 14:18. |