Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.025 c
1-84144
Comp
2003-06-02 13:06
2003.06.26
Как заставить ScroolBar прокручиваться от ролика мыши?


11-84048
Друмлин
2002-10-07 18:33
2003.06.26
Иконку в ListView


1-84319
Shooraniy
2003-06-16 03:27
2003.06.26
определить подключен ли комп к интернет через диал-ап...


3-83876
ec
2003-05-29 18:57
2003.06.26
TDBImage


3-84032
Инна
2003-06-01 01:55
2003.06.26
FastReport





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский