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