На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Перевести код работы с массивом из PHP на Delphi
    Необходимо перевести код работы с массивом из PHP на Delphi
    ExpandedWrap disabled
      $files['qaz1.txt'][] = array('20kb,' 'readonly');
      $files['qaz1.txt'][] = array('30kb,' 'archive');
      $files['qaz1.txt'][] = array('40kb,' 'readonly');

    Т.е. на PHP мы можем очень просто получить значение 30кб: $d = $files['qaz1.txt'][1][0];

    А как сделать подобное на Delphi?

    Цитата
    Мне вот как так нужно

    [товар1][0] = array('10', '20')
    [товар1][1] = array('15', '30')
    [товар1][2] = array('12', '10')

    [товар2][0] = array('11', '20')
    [товар2][1] = array('25', '30')
    [товар2][2] = array('32', '10')

    ну в крайнем случае так, но это избыточно

    [0][0] = array('name1', '')
    [0][1] = array('10', '20')
    [0][2] = array('15', '30')
    [0][3] = array('12', '10')

    [1][0] = array('name2', '')
    [1][1] = array('10', '20')
    [1][2] = array('15', '30')
    [1][3] = array('12', '10')

    Пробовал TDictionary, но возникли трудности: не совсем понятно, как получить число дочерних элементов например товара 1, и как их перебрать в цикле.

    ExpandedWrap disabled
      var
        key: string;
       
        MyFiles: TDictionary<String,TDictionary<Integer,TA>>;
        fl: TDictionary<Integer,TA>;
      begin
        MyFiles := TDictionary<String,TDictionary<Integer,TA>>.Create;
       
        fl := TDictionary<Integer,TA>.Create;
        fl.Add(0, ['120','20']);
        fl.Add(1, ['10','20']);
        fl.Add(2, ['10','20']);
       
        MyFiles.Add('Товар 1', fl);
       
        fl.Free;
       
        fl := TDictionary<Integer,TA>.Create;
        fl.Add(0, ['15','25']);
        fl.Add(1, ['15','25']);
       
        MyFiles.Add('Товар 2', fl);
       
        fl.Free;
       
        {fl := TDictionary<Integer,TA>.Create;
        fl.Add(3, ['20','30']);
       
        MyFiles.Add('Товар 1', fl);
       
        fl.Free;}
       
        Memo1.Lines.Clear;
        Memo1.Lines.Add('Items count: ' + IntToStr(MyFiles.Count));
       
        if MyFiles.ContainsKey('Товар 1') then
        begin
          Memo1.Lines.Add('Objecs count: ' + IntToStr(MyFiles['Товар 1'].Count));
          // Memo1.Lines.Add('Objecs count: ' + IntToStr(MyFiles.Items['Товар 1'].Keys.Count));
       
          fl := TDictionary<Integer,TA>.Create;
          fl := MyFiles['Товар 1'];
       
          Memo1.Lines.Add('"Товар 1" оjecs count: ' + IntToStr(fl.Count));
       
          fl.Free;
       
          Memo1.Lines.Add('');
       
          for key in MyFiles.Keys do
            Memo1.Lines.Add(key + ': ' + IntToStr(MyFiles[key].Count));
        end;
       
        MyFiles.Free;
      end;

    Используя Count также получаю что-то несуразное для дочерних элементов первого товара.

    Цитата
    Items count: 2
    Objecs count: 16
    "Товар 1" оjecs count: 0

    Товар 1: 0
    Товар 2: 0

    Да и закоментированный "fl.Add(3, ['20','30']);" - у меня есть рекурсия - сканирование папок, в них файлы, так вот все дочерние элементы добавляются не за один раз, а при каждом проходе. Пока до этого не дошел даже.

    ExpandedWrap disabled
      if(mb_strpos($dir."/".$v, '/Фото/'))
      $files[$shk][] = array($dir."/".$v, '[Фото]', $shk, $category);
      else
      if(mb_strpos($dir."/".$v, '/Инфографика/'))
      $files[$shk][] = array($dir."/".$v, '[Инфографика]', $shk, $category);
      else
    Сообщение отредактировано: chaser -
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0183 ]   [ 16 queries used ]   [ Generated: 27.04.24, 22:02 GMT ]