|
|
Регистрация | << Правила форума >> | 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. |