Ответы на все вопросы

FAQ / Программирование / Delphi

Как можно задать ''динамический массив''?

Вопрос:

    Я программирую в Delphi(вернее пока в Pascal'e) совсем недавно, но почти с первых минут изучения столкнулся с такой проблемой: как можно задать ''динамический массив''? Перечитал уже 2 книги, но толи книги пока попадались с поверхностным описанием, толи и вправду такое сделать невозможно :(( К примеру, если есть текстовый файл с n-строками (в начале выполнения программы неизвестно сколько строк в файле)и надо каждую строчку записать как отдельный элемент массива. Если в Pascal'e и Delphi это осуществляется разными способами, то расскажите пожалуйста как это делается и там и там.
    

Ответ:

    В Паскале работа с динамическими массивами делалась немного извращённо. Объявляется массивный тип, диапазон которого однозначно и с запасом перекрывает потребности. А далее под него выделяется память в куче, но строго необходимого количества. Примерно так:
    type
    TMyArray = array [0..10000] of TMyType;
    PMyArray = ^TMyArray;
    var
    PArray1: PMyArray;
    begin
    ...
    GetMem(PArray1, SizeOf(TMyType)*Count); {Выделяем ограниченное количество памяти}
    ...
    FreeMem(PArray1,SizeOf(TMyType)*Count);
    ...
    end.
    В Delphi 4 появился именно динамический массив, объявляется он так:
    var
    A: array of TMyType;
    Причём перед использованием необходимо задать его длину:
    SetLength(A, Size);
    Ну и предыдущий способ в Delphi никто не отменял.
    Применительно к примеру в Delphi могу порекомендовать следующий способ (если, конечно, файлы не очень большие): используй TStringList.
    var
    S: TStringList;
    begin
    ...
    S:= TStringList.Create;
    S.LoadFromFile(<filename>);
    ...
    S.Free;
    ...
    end.
    Доступ к строкам осуществляется просто: S[<Index>] есть строка, номер которой указан.
    Макс.
    

Версия для печати Найти похожие статьи
Поиск по сайту

Архив

ВсПнВтСрЧтПтСб
1234567
891011121314
15161718192021
22232425262728
293012345
6789101112
13141516171819
20212223242526
272829303112



Мы рекомендуем