Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2011, 10:40   #11
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
По умолчанию

Делаю так! Получаю от 0 до 49 строк о том что это массив. А пример вывода найти не могу.
Код:
var
 i : Integer;
 Countries: Variant;
begin
Countries := (HTTPRIO1 as ApiPortType).getCountries;
for i := VarArrayLowBound(Countries, 1) to VarArrayHighBound(Countries, 1) do
  begin
   If not(VarIsArray(Countries[i])) then
   ListBox1.Items.Add(inttostr(i)+' это не массив')
  else ListBox1.Items.Add(inttostr(i)+' это массив')
  end;;

Последний раз редактировалось fucil; 30.08.2011 в 11:21.
fucil вне форума Ответить с цитированием
Старый 30.08.2011, 10:42   #12
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
Восклицание Уже запарился не знаю что суда прикрутить

Подскажите пожалуйста как вывести ArrayVariant в TlistBox или Memo.

Больше ничего не нужно мня уже достал этот ArrayVariant прошу помощи !
fucil вне форума Ответить с цитированием
Старый 30.08.2011, 18:42   #13
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Если у тебя срабатывает ListBox1.Items.Add(inttostr(i)+' это массив'), то это значит, что Countries[i] - массив. Т.е. Countries массив и каждый его Countries[i] - тоже массив. Что это такое, когда элемент массива - другой массив?

Это - двухмерный массив.

И нужно просто повторить то, что ты уже сделал. Только сначала ты делал для Countries, а теперь надо сделать второй раз для Countries[i].
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 31.08.2011, 23:55   #14
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
по идеи getCountries() возвращает массив строк мне так кажется судя с некого описания тут!
а в ответ функции ShowBasicVariantType() я получаю varVariant или varNull.
возврашаемое varVariant означает что эта переменная также является типом Variant и для неё нужно снова провести проверку и определить что за тим в этом Variant

VarNull означает что переменная онулирована(память под неё выделена но обратится к ней нельзя).
Человек_Борща вне форума Ответить с цитированием
Старый 01.09.2011, 10:08   #15
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
Восклицание Трындец я схожу сума ! что тут не так ?

Делаю вот так:
Код:
var
 i,j : Integer;
 Countries: Variant;
begin
Countries := (HTTPRIO1 as ApiPortType).getCountries;
for i := VarArrayLowBound(Countries, VarArrayDimCount(Countries)) to VarArrayHighBound(Countries, VarArrayDimCount(Countries)) do

    for j :=VarArrayLowBound(Countries[i], VarArrayDimCount(Countries[i])) to VarArrayHighBound(Countries[i], VarArrayDimCount(Countries[i])) do
  begin
    memo1.Lines.Add('i='+inttostr(i)+' '+'J='+inttostr(j));
  end;
Логика поидеи правильна, но тогда как вывести этот массив ?
Побывал так
Код:
memo1.Lines.Add(Countries[i,j]);
Получаю ошибку индекса (or safe array index out of bounds)!
Решил сделать вывод матрицы массива получаю вот этот хаус :
i=0 J=0
i=0 J=1
i=0 J=2
i=0 J=3
i=1 J=0
i=1 J=1
i=1 J=2
i=2 J=0
i=2 J=1
i=2 J=2
i=2 J=3
i=3 J=0
i=3 J=1
i=3 J=2
i=3 J=3
i=4 J=0
i=4 J=1
i=4 J=2
i=5 J=0
i=5 J=1
i=5 J=2
i=5 J=3
i=6 J=0
i=6 J=1
i=6 J=2
i=6 J=3
i=7 J=0
i=7 J=1
i=7 J=2
i=7 J=3
i=8 J=0
i=8 J=1
i=8 J=2
i=8 J=3
i=9 J=0
i=9 J=1
i=9 J=2
i=9 J=3
i=10 J=0
i=10 J=1
i=10 J=2
i=10 J=3
i=10 J=4
i=11 J=0
i=11 J=1
i=11 J=2
i=11 J=3
i=12 J=0
i=12 J=1
i=12 J=2
i=12 J=3
i=13 J=0
i=13 J=1
i=13 J=2
i=13 J=3
i=14 J=0
i=14 J=1
i=14 J=2
i=14 J=3
i=14 J=4
i=15 J=0
i=15 J=1
i=15 J=2
i=15 J=3
i=15 J=4
i=16 J=0
i=16 J=1
i=16 J=2
i=16 J=3
i=17 J=0
i=17 J=1
i=17 J=2
i=17 J=3
i=18 J=0
i=18 J=1
i=18 J=2
i=18 J=3
i=19 J=0
i=19 J=1
i=19 J=2
i=19 J=3
i=20 J=0
i=20 J=1
i=20 J=2
i=20 J=3
i=20 J=4
i=21 J=0
i=21 J=1
i=21 J=2
i=21 J=3
i=22 J=0
i=22 J=1
i=22 J=2
i=22 J=3
i=22 J=4
i=23 J=0
i=23 J=1
i=23 J=2
i=23 J=3
i=24 J=0
i=24 J=1
i=24 J=2
i=24 J=3
i=25 J=0
i=25 J=1
i=25 J=2
i=25 J=3
i=26 J=0
i=26 J=1
i=26 J=2
i=26 J=3
i=27 J=0
i=27 J=1
i=27 J=2
i=27 J=3
i=28 J=0
i=28 J=1
i=28 J=2
i=28 J=3
i=29 J=0
i=29 J=1
i=29 J=2
i=29 J=3
i=30 J=0
i=30 J=1
i=30 J=2
i=30 J=3
i=31 J=0
i=31 J=1
i=31 J=2
i=31 J=3
i=32 J=0
i=32 J=1
i=32 J=2
i=32 J=3
i=33 J=0
i=33 J=1
i=33 J=2
i=33 J=3
i=34 J=0
i=34 J=1
i=34 J=2
i=34 J=3
i=35 J=0
i=35 J=1
i=35 J=2
i=35 J=3
i=36 J=0
i=36 J=1
i=36 J=2
i=36 J=3
i=37 J=0
i=37 J=1
i=37 J=2
i=37 J=3
i=38 J=0
i=38 J=1
i=38 J=2
i=38 J=3
i=39 J=0
i=39 J=1
i=39 J=2
i=39 J=3
i=40 J=0
i=40 J=1
i=40 J=2
i=40 J=3
i=41 J=0
i=41 J=1
i=41 J=2
i=41 J=3
i=42 J=0
i=42 J=1
i=42 J=2
i=42 J=3
i=43 J=0
i=43 J=1
i=43 J=2
i=43 J=3
i=44 J=0
i=44 J=1
i=44 J=2
i=44 J=3
i=45 J=0
i=45 J=1
i=45 J=2
i=45 J=3
i=46 J=0
i=46 J=1
i=46 J=2
i=47 J=0
i=47 J=1
i=47 J=2
i=47 J=3
i=48 J=0
i=48 J=1
i=48 J=2
i=48 J=3
i=49 J=0
i=49 J=1
i=49 J=2

Как же его то вывести в мемо содержимое этого массива ? Что то тут нетак !

во только что попробовал ещё вот такую проверку типов ячеек:
Код:
begin
VarArrayItemI := Countries[i];
       VarArrayItemJ := VarArrayItemI[j];
    memo1.Lines.Add('В массиве i='+inttostr(i)+' тип '+VariantType(VarArrayItemI)+' ||| '+'В массиве J='+inttostr(j)+' тип ='+VariantType(VarArrayItemJ));
end;
вообщем везде получаю (varVariant)
Ребята ну помогите это уже не смешно 3 ночь нормально не сплю

Последний раз редактировалось fucil; 01.09.2011 в 11:13.
fucil вне форума Ответить с цитированием
Старый 01.09.2011, 11:36   #16
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Я бы попробовал так:

Код:
var
  Countries, Values: Variant;
  CountryIndex, ValueIndex: Integer;
  CountryDescription: String;
begin
  Countries := (HTTPRIO1 as ApiPortType).getCountries;
  for CountryIndex := VarArrayLowBound(Countries, 0) to VarArrayHighBound(Countries, 0) do
  begin
    CountryDescription := '';
    Values := Countries[CountryIndex];
    for ValueIndex := VarArrayLowBound(Values, 0) to VarArrayHighBound(Values, 0) do
      CountryDescription := CountryDescription + Values[ValueIndex] + ', ';
    Memo1.Lines.Add(CountryDescription);
  end;
end;
Если же там трёх мерный массив, то:

Код:
  procedure PrintArray(const AArray: Variant);
  var
    Index: Integer;
    Value: Variant;
  begin
    for Index := VarArrayLowBound(AArray, 0) to VarArrayHighBound(AArray, 0) do
    begin
      Value := AArray[Index];
      if VarIsArray(Value) then
        PrintArray(Value)
      else
        Memo1.Lines.Add(Value);
    end;
  end;

var
  Countries: Variant;
begin
  Countries := (HTTPRIO1 as ApiPortType).getCountries;
  PrintArray(Countries);
end;
Цитата:
Ребята ну помогите это уже не смешно 3 ночь нормально не сплю
У тебя интересная позиция канючить: и каким же макаром тебе напишут код, если мы не знаем, что там у тебя сидит? Судить мы можем только по твоим словам, а код опробовать - возможности нет.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 01.09.2011, 12:00   #17
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
У тебя интересная позиция канючить: и каким же макаром тебе напишут код, если мы не знаем, что там у тебя сидит? Судить мы можем только по твоим словам, а код опробовать - возможности нет.

Согласен полностью.

Вот какой тест провёл я:
Код:
function TForm1.GetVariantType(aVar: Variant): Integer;
begin
  Result := (VarType(aVar) and VarTypeMask);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  vArr: array[0..5] of Variant; //Инициализация  vArr: array[0..5] of Variant =(n,n,..); не возможна компилятором
  i: Integer;
begin
  vArr[0] := $5B;
  vArr[1] := Integer(1234); //представим число 1234 как целое число
  vArr[2] := 'HELLO';
  vArr[3] := null;
  vArr[4] := True;
  vArr[5] := Word(999999); //представим число 9999999 как слово

  for i := Low(vArr) to High(vArr) do
  begin
    case GetVariantType(vArr[i]) of
      varByte: Memo.Lines.Add(Format(' Элемент vArr[%d] = тип "Байт"', [i]));
      varInteger: Memo.Lines.Add(Format(' Элемент vArr[%d] = тип "Целое число"', [i]));
      varString: Memo.Lines.Add(Format(' Элемент vArr[%d] = тип "Строка"', [i]));
      varNull: Memo.Lines.Add(Format(' Элемент vArr[%d] = тип "null"', [i]));
      varBoolean: Memo.Lines.Add(Format(' Элемент vArr[%d] = тип "Логическая переменная"', [i]));
      varWord: Memo.Lines.Add(Format(' Элемент vArr[%d] = тип "Слово"', [i]));
    end;
  end;
end;
Человек_Борща вне форума Ответить с цитированием
Старый 01.09.2011, 12:18   #18
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Вот нашёл полезную ссылку: http://ollegrasoft.narod.ru/Delphi_6/Chapter10/1.htm
Человек_Борща вне форума Ответить с цитированием
Старый 01.09.2011, 12:28   #19
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
Восклицание Вот исходники ... просто П... тут непонятно в чем дело !

Выше сказанное не помогло вываживаю исходник
Скачать вот отсюда потому что на форум не получается выложить!
fucil вне форума Ответить с цитированием
Старый 01.09.2011, 13:04   #20
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

ваша проблема в том, что ваш
Код:
Countries := (HTTPRIO1 as ApiPortType).getCountries;
возвращает вам массив из таких же вариантов.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Variant как параметр по умолчанию Gregor Общие вопросы Delphi 4 06.05.2011 11:15
Тип Variant Дэкан1 Помощь студентам 1 21.05.2010 20:31
тип Variant Михаил Юрьевич Общие вопросы Delphi 3 31.01.2008 09:05
как variant из текста преобразовать в булин? Deceased Общие вопросы Delphi 10 18.12.2007 10:24