Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2018, 22:19   #1
Amandohk
Новичок
Джуниор
 
Регистрация: 10.05.2018
Сообщений: 1
По умолчанию Помогите с функцией сохранения/сохранения файла в Delphi

Здравствуйте,помогите с кодом.Нужно,что бы все значения с окон сохранялись в файл,который можно открыть.И при необходимости можно загрузить обратно в программу,что все было на "своих местах".
Вот что мой пытливый мозг смог сделать.

Цитата:
Код:
procedure TForm1.SaveClick(Sender: TObject);
var f:textfile;
fs:integer; fd:integer; fc:integer; fi:integer; fw:integer; fz:integer;
ms:integer; md:integer; mc:integer; mi:integer; mw:integer; mz:integer;
pw:integer; r:string;
begin
  SaveDialog1.Filter := 'Лист персонажа|*.txt';
  SaveDialog1.DefaultExt := '*.txt';
if SaveDialog1.Execute then begin
if FileExists(SaveDialog1.FileName) then
      if Application.MessageBox('Такой файл уже существует. Перезаписать?','Вопрос',mb_YesNo) <> 6 then Exit;
    AssignFile(f,SaveDialog1.FileName);
    {$I-} ReWrite(f,1); {$I+}
    if IOResult <> 0 then begin
      Application.MessageBox('Ошибка записи файла!','Ошибка',mb_ok);
      Exit;

fs:=StrToInt(ItogStr.Text);
fd:=StrToInt(ItogDex.Text);
fc:=StrToInt(ItogCon.Text);
fi:=StrToInt(ItogInt.Text);
fw:=StrToInt(ItogWis.Text);
fz:=StrToInt(ItogChar.Text);

ms:=StrToInt(ModStr.text);
md:=StrToInt(ModDex.Text);
mc:=StrToInt(ModCon.Text);
mi:=StrToInt(ModInt.Text);
mw:=StrToInt(ModWis.Text);
mz:=StrToInt(ModChar.Text);
pw:=StrToInt(PassWisdom.Text);
r:=OpisanieRace.Lines[0];
    AssignFile(f,SaveDialog1.FileName);
    ReWrite(f);
    Writeln(f,'сила:',fs,'          модификатор:',ms);
    Writeln(f,'ловкость:',fd,'      модификатор:',md);
    Writeln(f,'телосложение:',fc,'  модификатор:',mc);
    Writeln(f,'интеллект:',fi,'     модификатор:',mi);
    Writeln(f,'мудрость:',fw,'      модификатор:',mw);
    Writeln(f,'харизма:',fz,'       модификатор:',mz);
    Writeln(f,'Пассивная внимательность:',pw);
    Writeln(f,r);
    CloseFile(f);
    end;
end;
end;
end.
Интерфейс.jpg
Amandohk вне форума Ответить с цитированием
Старый 11.05.2018, 15:05   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от Amandohk Посмотреть сообщение
Writeln(f,'сила:',fs,' модификатор:',ms);
Writeln(f,'ловкость:',fd,' модификатор:',md);
Writeln(f,'телосложение:',fc,' модификатор:',mc);
Writeln(f,'интеллект:',fi,' модификатор:',mi);
Writeln(f,'мудрость:',fw,' модификатор:',mw);
Writeln(f,'харизма:',fz,' модификатор:',mz);
Writeln(f,'Пассивная внимательность:',pw);
такой тип записи лишь усложнит вам дальнейшее считывание данных. Основное назначение файлов - это удобное его использование для чтения/записи в вашем случае.

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

Код:
; некоторый комментарий
# комментарий в стиле Unix

[Section1]
; комментарий о разделе
var1=значение_1 ; иногда допускается комментарий к отдельному параметру
var2=значение_2
  
[Section2]
var1=значение_1
var2=значение_2
где секцией будет непосредственно сам тип перка: ловкость/сила и т.д.
а на месте var1, var2 - уже придумать название что бы записивыть значение этих перков и от расы они или же самого персонажа.

у Delphi имеются свои модули для упрощения работы с ini файлами источник примера

Код:
var
  Ini: Tinifile; //необходимо создать объект, чтоб потом с ним работать
begin
  //создали файл в директории программы
  Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'MyIni.ini');
  Ini.WriteInteger('Size','Width',form1.width);
  Ini.WriteInteger('Size','Height',form1.height);
  Ini.WriteInteger('Position','X',form1.left);
  Ini.WriteInteger('Position','Y',form1.top);
  Ini.Free;
end;
и вот так выглядеть в файле будет:

Цитата:
[Size]
Width=188
Height=144

[Position]
X=14
Y=427
Код:
var
  Ini: Tinifile;
begin
  //открываем файл
  Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'MyIni.ini');
  Form1.Width:=Ini.ReadInteger('Size','Width',100);
  //последнее значение (100) это значение по умолчанию (default)
  Form1.Height:=Ini.ReadInteger('Size','Height',100);
  Form1.Left:=Ini.ReadInteger('Position','X',10);
  Form1.Top:=Ini.ReadInteger('Position','Y',10);
  Ini.Free;
end;
при этом отпадает необходимость следить за очередностью считываемых/записываемых данных. Встроенный модуль сам все найдет и прочитает/запишет в соответствии с выстроенной структурой.
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дата сохранения файла Mishko78 Общие вопросы Delphi 3 07.10.2015 12:12
Сохранения файла cherry25 Общие вопросы Delphi 2 16.01.2014 13:33
Открытие и сохранения файла в StringGrid'е Weyner Общие вопросы Delphi 4 23.10.2010 18:37
Проблема такова: язык:Delphi7; сохранения файла; загрузка файла в String Grid lightdevil Общие вопросы Delphi 3 06.03.2009 23:10
Сохранения файла после передачи albatros Работа с сетью в Delphi 2 26.12.2008 21:07