Главная страница
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-84648
maxk
2003-06-04 19:01
2003.06.26
webbrowser или.... ???


14-84680
Karabas Barabas
2003-06-10 03:18
2003.06.26
Delphi main questions


4-84828
fifo
2003-04-22 18:12
2003.06.26
Как кликнуть левой кнопкой мышки по чужому окну?


14-84550
Omar2002
2003-06-06 17:16
2003.06.26
Мастер кривых враз


6-84510
mixamixa
2003-04-20 20:25
2003.06.26
Предача файлов ч/з ClientSocket & Serve