Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.26;
Скачать: CL | DM;

Вниз

Сохранение масива в файл и загрузка из файла   Найти похожие ветки 

 
Spartak ©   (2003-06-16 07:46) [0]

Подскажите пожайлуста как реализовать запись и чтение масива из файла


 
Forester ©   (2003-06-16 08:11) [1]

Пример функции, производящей запись в бинарный файл

procedure SaveToFile(FileName:String; const buffer; Size: Integer);
var
F:File;
begin
if Size<=0 then exit;
AssignFile(F, FileName);
Rewrite(F, 1);
BlockWrite(F, buffer, Size);
CloseFile(F);
end;

Пример ее вызова

procedure TForm1.Button1Click(Sender: TObject);
var
Arr:array[1..5] of word;
i:integer;
begin
for i:=low(Arr) to High(Arr) do
Arr[i]:=i;
SaveToFile("SaveFile.bin", Arr[1], Sizeof(arr)*Sizeof(word));
end;

Чтение производится практически аналогично, с использованием функций Reset и BlockRead и проверкой размера файла.

Это всего лишь один способ. Можно создавать наследника TStream, писать в текстовый файл и т.д. Все определяется задачей.


 
Song ©   (2003-06-16 08:52) [2]

Да просто Write


 
Spartak ©   (2003-06-16 09:03) [3]

> Forester

Спасибо за пример

Ты бы не мог написать код чтения записанного ранее файла ?
я просто не работал ещё в этом направлении и по этому немного не ссображаю :)


 
Anatoly Podgoretsky ©   (2003-06-16 09:04) [4]

А массив то какой?


 
Spartak ©   (2003-06-16 09:11) [5]

>Anatoly Podgoretsky

Buffer : array[0..64] of Char;


 
Skier ©   (2003-06-16 09:13) [6]

WriteBuffer(...)
ReadBuffer(...)


 
Spartak ©   (2003-06-16 09:25) [7]

код :

procedure loadToFile(FileName:String; const buffer; Size: Integer);
var
F:File;
begin
if Size<=0 then exit;
AssignFile(F, FileName);
Reset(F, 1);
BlockRead(F, buffer, Size);
CloseFile(F);
end;

Выдаёт ошибку :( я не понял как считывать !
А запись в файл идёт нормально


 
Skier ©   (2003-06-16 09:29) [8]

-Spartak © (16.06.03 09:25)
- файл нетипизированный
- Size чему у тебя равен ?
- как вызываешь loadToFile ?


 
Anatoly Podgoretsky ©   (2003-06-16 09:31) [9]

Ну тут по уму лучше создать тип и использовать типизированный файл.


 
Alex_***   (2003-06-16 09:35) [10]

TMemoryStream:
->Write(Buffer,sizeof(Buffer))...
->SaveToFile("tt.dat")


 
Spartak ©   (2003-06-16 09:37) [11]

> Skier

размер size 64

остальное не знаю :( не умею просто ( пока что не сталкивался )

Пример как подсказал Forester работает , но не могу вызвать обратную функцию чтения масива из файла :(


 
Spartak ©   (2003-06-16 09:59) [12]

что такое типизированный файл ? Как с ним работать ?


 
Alex_***   (2003-06-16 10:02) [13]

Что ты заморачиваешься на типизированные файлы? Сделай объект типа TMemoryStream и гоняй массивы туда/обратно сколько хочешь...


 
Spartak ©   (2003-06-16 10:11) [14]

Да блин ! вы можете подсказать что исправить вот здеся :

procedure SaveToFile(FileName:String; const buffer; Size: Integer);
var
F:File;
begin
if Size<=0 then exit;
AssignFile(F, FileName);
Rewrite(F, 1);
BlockWrite(F, buffer, Size);
CloseFile(F);
end;


чтобы грузить масив из файла ?


 
Anatoly Podgoretsky ©   (2003-06-16 10:16) [15]

А чего здесь не нравится


 
Alex_***   (2003-06-16 10:19) [16]

Если тебе надо читать, так и читай.... Reset() вместо Rewrite()
BlockRead() вместо BlockWrite()


 
Spartak ©   (2003-06-16 10:36) [17]

это то я понял.

пишу BlockRead(F, buffer, Size);

выдаёт ошибку : constant object cannot passed as var parameter

В чём проблема ?


 
Alex_***   (2003-06-16 10:44) [18]

Ну и не передавай как const )) Определи параметр как ссылку: var Buffer


 
Anatoly Podgoretsky ©   (2003-06-16 10:45) [19]

Так может у тебя массива нет?


 
Spartak ©   (2003-06-16 10:50) [20]

> Alex_***
и так глобально стоит
var
Buffer : array[0..] of Char;

сохраняеться главно нормально , а вот не хочет считывать :(


 
Spartak ©   (2003-06-16 10:51) [21]

вернее не Buffer : array[0..] of Char;
а Buffer : array[0..255] of Char;


 
Anatoly Podgoretsky ©   (2003-06-16 10:56) [22]

А причем тут глобальный массив, если у тебя он не используется, а есть константный массив const buffer
Мой совет или переходи на типизированные файлы или используй потоковый доступ TFileStream


 
Alex_***   (2003-06-16 10:56) [23]

procedure ReadFromFile(FileName:String; var buffer; Size: Integer);


 
Spartak ©   (2003-06-16 11:07) [24]

Всё разобрался ! всем большое спасибо ! :)



Страницы: 1 вся ветка

Текущий архив: 2003.06.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.016 c
14-84715
konstantinov
2003-06-03 23:08
2003.06.26
Что такое WebMoney? И с чем его едят?


1-84112
Sam
2003-06-08 01:28
2003.06.26
Kylix - не запускаются скомпилинные проги


1-84273
prorok2
2003-06-14 13:51
2003.06.26
Добавление OnClick для меню в run-time


1-84181
//ALEX
2003-06-11 22:12
2003.06.26
Процедура отрисовки формы


3-83877
DBDev
2003-05-29 11:45
2003.06.26
Знатоки, подскажите в чем ошибка? Не дает создать SP!!!!