Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Из-файла в массив.

Автор: Haba 30.05.2004 23:38

Господа модераторы, прошу извинения за ругательный характер заголовка предыдущей созданной мной темой.
А теперь по сабжу. Очень прошу, помогите пожалуйста: не могу найти ни в одной справке, как из файла перекопировать данные в массив... Причём не надо писать программу, опишите только одну или две строчки (уж не знаю, сколько места эта операция занимает) того, как это делается. Заранее благодарен.

Автор: APAL 30.05.2004 23:43

Можно так:

f - файл
m - массив

Код
Read(f,m)

или
Код
For i:=1 to 10 do Read(f,m[i]);

или
Код
i:=1;
While not EOF(f) do
Begin
 Read(f,m[i]);
 Inc(i);
End;

или через BlockRead

Думаю найдется еще несколько способов - все зависит от поставленной задачи.

Автор: Altair 31.05.2004 0:36

Цитата
Господа модераторы, прошу извинения за ругательный характер заголовка предыдущей созданной мной темой

Во-первых не модераторы, а модератор.
Во-вторых не господа, а товарищи! Господа денег требуют, а мы
Цитата
помогая друг другу, мы справимся с любыми трудностями!


И тему я переименовал. :D
По делу:
-------------------------------------
Если файл тектовый, то важно знать как в нем записанны элементы массива, если посточно, то используем процедуру ReadLn, для считывания элементов в файл, а если эл-ты массива записанны в строчку через пробел, то используем Read. (процедуры в цикле "пока нет конца файла повторять" - "While Not eof(f) do")
Если файл двоичный, то нужно знать его структуру.
Например:
F:file of byte
Значит каждый эл-т файла может быть эл-том массива.
Или f:file of array[1..n];
значит в файле уже записан массив, и его просто надо считать так:
read(f,a), где a - массив, точно такой как в файле.

-----
Т.е. для считывания из файла эл-тов надо использовать в цикле процедуры read или readln.

Цитата
или через BlockRead

Ну если файл не типизированный, то можно, только это сложнее и не нужно для учебных задач.
Это скорее для настоящих задач, т.к. используя BlockRead можно увеличить до максимума скорость чтения, если читать данные, размер которых совпадает с размером кластера.

Автор: APAL 31.05.2004 0:55

Респект!

:D

Автор: Haba 31.05.2004 1:26

Код
i:=1;
While not EOF(f) do
Begin
Read(f,m[i]);
Inc(i);
End;


Вот именно это мне и нужно было! Огромнейшее спасибо!