Страница 1 из 1

как прочитать массив из файла

Добавлено: 15 май 2007, 14:47
Need_Help
Есть TP 7.0.
Имеется файл my.txt, в котором есть массив чисел через пробел:
4 3 10
Не могу этот простейший массив из файла передать на экран ( С обычным текстом проблем нет, но когда в файле массив..?)
Так не получается:

Program OpenFile;

const N =3;
var f:text;
s: array [1..N] of integer;
begin
assign(f,h:\bp\bin\moi pro\my.txt');
read(f,s);
writeln(s);
close(f);
end.
Может кто-нибудь знает как правильно, то подскажите а то пишет ошибку
Cannot read or write.....

:rolleyes: Very Need Help Thank you very mutch

Re: как прочитать массив из файла

Добавлено: 15 май 2007, 14:48
Хыиуду
for i:=1 to n do read(f,s);

Re: как прочитать массив из файла

Добавлено: 15 май 2007, 15:19
SergeyS
readln(f, s)

Re: как прочитать массив из файла

Добавлено: 16 май 2007, 01:39
Игорь Акопян
Хыиуду, +1
надо в цикле читать по-элементно, readln(f, s) прочитает из фала строку до CRLF

Re: как прочитать массив из файла

Добавлено: 17 май 2007, 12:24
Lesha
В файле нет инструкции Reset (f)
Если не берет целый массив, можно по элементам через цикл for.

Re: как прочитать массив из файла

Добавлено: 17 май 2007, 17:24
Need_Help
спасибо, а как быть , если массивов два?
хотелось бы понять, как можно прочесть два массива из файла.

с одним массивом всё понятно ., при помощи цикла считать поэлементно массив.

но как быть с двумя. непонятно как прочитать первый элемент второго массива
3 5 8 19
2 4 9 16 и чем отделять один массив от другого, т.е как обратиться к первому элементу второго массива.

Re: как прочитать массив из файла

Добавлено: 18 май 2007, 01:08
Naeel Maqsudov

Код: Выделить всё

const
  _n=100;
  _m=10;
type
  TOneArray=record
    n:integer;
    a:array[1.._n] of integer;
  end;
  TAllArrays=array[1.._m] of TOneArray;
var
  f:text;
  arr: TAllArrays;
  i,j,k:integer;
begin
  assign(f,'c:\my.txt');
  reset(f);
  i:=0;
  while (not eof(f)) and (i<_m) do begin
    inc(i);
    with arr[i] do begin
      n:=0;
      while not eoln(f) and (n<_n) do begin
        inc(n);
        read(f,a[n]);
      end;
      readln(f);
    end;
  end;
  close(f);


  { PROVERKA }
  writeln (i, ' array(s) was(were) loaded');
  for j:=1 to i do with arr[j] do begin
    writeln ('array ',j);
    for k:=1 to n do write(a[k], ', ');
    writeln;
  end;

  write('Press Enter');readln;
end.
Вот это прочитывает из файла до _m массивов. В каждом массиве допускается до _n элементов.

Re: как прочитать массив из файла

Добавлено: 18 май 2007, 12:20
Need_Help
У меня программа не на Delphi а на паскале :)

Re: как прочитать массив из файла

Добавлено: 19 май 2007, 13:38
Lesha
В файле нельзя хранить двумерный массив, если это текстовой файл. как в клали туда элементы, так и доставайте. На пример у вас был массив 3 * 2 . Вы положили по элементам 1 -ю строку, потом 2 -ю и 3 -ю. Так же и доставайте. А сколько было элементов и какая размерность массива надо самому помнить или ставuть текстовые указатели в файле. Лучше вообще использовать типизированный файл:

type
TArr = array [1..10] of Integer;

var
a: array [1..5] of TArr;
f: file of TArr;
...
Rewrite (f);
...

for i := 1 to 10 do begin
a [1] := i; {любое число}
end;

Write (f, a [4]);
Close (f);

...

Reset (f)
Seek (f, 3); {перейти к 3 записи}
Read (a [2]);
Close (f);
end.

Можно прямо двумерные массивы записывать.
Lesha.