Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> динмические типы, определяемые в процедуре 
V
    Опции темы
stalkerok
Дата 16.12.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



NewDima СПАСИБО!!! то что надо! а как же читать из такого файла?  может Поможете дописать эту функцию? и для чего нужен Randomize;?

Это сообщение отредактировал(а) stalkerok - 17.12.2008, 01:38
PM MAIL   Вверх
stalkerok
Дата 17.12.2008, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



Пробовал так:
Код

//******************************************************************************
//Сохранение
procedure SaveArrToFile(filename: TFileName; arr: pointer; len: integer);
var
  arrFile: file;
begin
  if FileExists(filename) then
    ShowMessage('Файл существует')
  else
  begin
    AssignFile(arrFile, FileName);
    ReWrite(arrFile, len);
    BlockWrite(arrFile, PByteArray(arr)^[0], 1);
    CloseFile(arrFile);
  end;
end;

//******************************************************************************
//Загрузка
procedure LoadFileToArr(filename: TFileName; arr: pointer; len: integer);
var
  arrFile: file;
begin
  if FileExists(filename) then
  begin
    AssignFile(arrFile, FileName);
    Reset(arrFile, len);
    BlockRead(arrFile, PByteArray(arr)^[0], 1);
    CloseFile(arrFile);
  end
  else
    ShowMessage('Файла не существует');
end;


но не получается...

Это сообщение отредактировал(а) stalkerok - 17.12.2008, 02:34
PM MAIL   Вверх
NewDima
Дата 17.12.2008, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



лови

Добавлено через 5 минут и 32 секунды
Код

function LoadArrFromFile(filename: TFileName; arr: pointer; len: integer):boolean;
var  arrFile: file;
begin
 AssignFile(arrFile, FileName);
 Reset(arrFile, len);
 BlockRead(arrFile, PByteArray(arr)^[0], 1);
 CloseFile(arrFile);
end;


Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  figli.rar 1,91 Kb
PM ICQ   Вверх
stalkerok
Дата 17.12.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



NewDima Спасибо! только не пойму почему то не правильно работает.
например сохранил массив длиной 4, а затем при загрузке этого массива его длина = 3876... причем файл всего 4 байта...
Код

Type
DotRec = record
  id:integer;
  x:integer;
  y:integer;
  z:integer;
end;

var
  DotArr: array of DotRec;

//******************************************************************************
//Сохранение
procedure SaveArrToFile(filename: TFileName; arr: pointer; len: integer);
var
  arrFile: file;
begin
  AssignFile(arrFile, FileName);
  ReWrite(arrFile, len);
  BlockWrite(arrFile, PByteArray(arr)^[0], 1);
  CloseFile(arrFile);
end;

//******************************************************************************
//Загрузка
procedure LoadArrFromFile(filename: TFileName; arr: pointer; len: integer);
var
  arrFile: file;
begin
  AssignFile(arrFile, FileName);
  Reset(arrFile, len);
  BlockRead(arrFile, PByteArray(arr)^[0], 1);
  CloseFile(arrFile);
end;


вызываю
Код

LoadArrFromFile('test.txt', @DotArr, len);
SaveArrToFile('test.txt', @DotArr, len);


а если сохранять массив из типа:
Код

Type
NameGridRec = record
  ncell: String[255];
end;

вообще вылетает с ошибкой...
PM MAIL   Вверх
MetalFan
Дата 17.12.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



читай про статические и динамические массивы.
в твоем случае тебе надо передать указатель не на переменную-массив, а на первый элемент массива в эти функции
так же неплохо сохранить длину массива, например, в начале файла.

Это сообщение отредактировал(а) MetalFan - 17.12.2008, 11:43


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
stalkerok
Дата 17.12.2008, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



MetalFan не понял это как подскажите пожалуйста.
PM MAIL   Вверх
NewDima
Дата 17.12.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



не
Код

LoadArrFromFile('test.txt', @DotArr, len);
SaveArrToFile('test.txt', @DotArr, len);
, а
Код

LoadArrFromFile('test.txt', @DotArr[1], len);
SaveArrToFile('test.txt', @DotArr[1], len);


Добавлено @ 15:39
да, как сказал MetalFan, читай теорию  smile 
и в следующий раз, если хочешь чему-то научиться, то  лучше спрашивай не "как?", а "вот так правильно?" и приводи свои додумки, а мы объясним, что правильно и не правильно и почему. Иначе все, что тебе здесь говорят ты забудешь через неделю

Это сообщение отредактировал(а) NewDima - 17.12.2008, 15:39
PM ICQ   Вверх
stalkerok
Дата 17.12.2008, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



Спасибо Вам, но так и не получается, хотя сделал всё как Вы подсказали:
Код

//******************************************************************************
//Сохранение
procedure SaveArrToFile(filename: TFileName; arr: pointer; len: integer);
var
  arrFile: file;
begin
  AssignFile(arrFile, FileName);
  ReWrite(arrFile, len);
  BlockWrite(arrFile, PByteArray(arr)^[0], 1);
  CloseFile(arrFile);
end;
//******************************************************************************
//Загрузка
procedure LoadArrFromFile(filename: TFileName; arr: pointer; len: integer);
var
  arrFile: file;
begin
  AssignFile(arrFile, FileName);
  Reset(arrFile, len);
  BlockRead(arrFile, PByteArray(arr)^[0], 1);
  CloseFile(arrFile);
end;


использование
Код

Type
DotRec = record
  id:integer;
  x:integer;
  y:integer;
  z:integer;
end;

var
  DotArr: array of DotRec;

  SaveArrToFile('test.txt', @DotArr[1], 4);
  DotArr:= nil;
  SetLength(DotArr, 4);
  LoadArrFromFile('test.txt', @DotArr[1], 4);


но, например при сохранении:
Код

DotArr[0].id:=0
DotArr[0].x:=3
DotArr[0].y:=3
DotArr[0].z:=0
DotArr[1].id:=1
DotArr[1].x:=3
DotArr[1].y:=6
DotArr[1].z:=3
DotArr[2].id:=2
DotArr[2].x:=5
DotArr[2].y:=3
DotArr[2].z:=6
DotArr[3].id:=3
DotArr[3].x:=4
DotArr[3].y:=7
DotArr[3].z:=8


загружается
Код

DotArr[0].id:=0
DotArr[0].x:=0
DotArr[0].y:=0
DotArr[0].z:=0
DotArr[1].id:=1
DotArr[1].x:=0
DotArr[1].y:=0
DotArr[1].z:=0
DotArr[2].id:=0
DotArr[2].x:=0
DotArr[2].y:=0
DotArr[2].z:=0
DotArr[3].id:=0
DotArr[3].x:=0
DotArr[3].y:=0
DotArr[3].z:=0


Возможно файл сохраняется не полностью? ведь например вышеприведённый файл занимает 4байта, не мало?

Это сообщение отредактировал(а) stalkerok - 17.12.2008, 16:06
PM MAIL   Вверх
NewDima
Дата 17.12.2008, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



Код

type
dot = record
id, x, y, z: integer;
end;
var ArrDot: array[1..3] of dot;
    ArrDot1: array[1..3] of dot;
//******************************************************************************
//Ñîõðàíåíèå
procedure SaveArrToFile(filename: TFileName; arr: pointer; len: integer);
var
  arrFile: file;
begin
  AssignFile(arrFile, FileName);
  ReWrite(arrFile, len);
  BlockWrite(arrFile, PByteArray(arr)^[0], 1);
  CloseFile(arrFile);
end;
//******************************************************************************
//Çàãðóçêà
procedure LoadArrFromFile(filename: TFileName; arr: pointer; len: integer);
var
  arrFile: file;
begin
  AssignFile(arrFile, FileName);
  Reset(arrFile, len);
  BlockRead(arrFile, PByteArray(arr)^[0], 1);
  CloseFile(arrFile);
end;
var i: integer;
fr: string;
begin
randomize();
for i:=1 to 3 do
 begin
  ArrDot[i].id := i;
  ArrDot[i].x := RandomRange(0, 2);
  ArrDot[i].y := RandomRange(3, 5);
  ArrDot[i].z := RandomRange(6, 8);
  writeln(Format('ArrDot[%d].id = %d', [i, ArrDot[i].id]));
  writeln(format('ArrDot[%d].x = %d', [i, ArrDot[i].x]));
  writeln(format('ArrDot[%d].y = %d', [i, ArrDot[i].y]));
  writeln(format('ArrDot[%d].z = %d', [i, ArrDot[i].z]));
 end;
writeln('-------------------------------------');
SaveArrToFile('file.bin', @ArrDot[1], sizeof(dot)*3);
LoadArrFromFile('file.bin', @ArrDot1[1], sizeof(dot)*3);
for i:=1 to 3 do
 begin
  writeln(Format('ArrDot1[%d].id = %d', [i, ArrDot1[i].id]));
  writeln(format('ArrDot1[%d].x = %d', [i, ArrDot1[i].x]));
  writeln(format('ArrDot1[%d].y = %d', [i, ArrDot1[i].y]));
  writeln(format('ArrDot1[%d].z = %d', [i, ArrDot1[i].z]));
 end;
readln;
end.

кидай свой код в аттаче, посмотрю, скажу, что неправильно

Добавлено через 8 минут и 4 секунды
ой -йой сразу твой код не глянул.
Я тебе так скажу: учи основы! и заодно узнай, сколько байт в целом числе, потом поймешь, сколько весит твоя структура, а потом умножишь на размер массива и поймешь, сколько он на самом деле места занимает. Нет слов, одни эмоции
никому вот это не показывай:
Код

  SaveArrToFile('test.txt', @DotArr[1], 4);
  DotArr:= nil;
  SetLength(DotArr, 4);
  LoadArrFromFile('test.txt', @DotArr[1], 4);


Это сообщение отредактировал(а) NewDima - 17.12.2008, 16:51
PM ICQ   Вверх
stalkerok
Дата 17.12.2008, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



NewDima СПАСИБО!
PM MAIL   Вверх
NewDima
Дата 17.12.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



пометь тему решеной, так принято
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.