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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2013, 17:03   #1
marwell.
Пользователь
 
Регистрация: 05.12.2012
Сообщений: 63
Вопрос запись/чтение ini файла

доброго времени суток
записываю данные в ini файл:
Код:
var s: string; 

procedure TForm1.Savemap1Click(Sender: TObject);

function BoolToStr(const value : boolean) : string;
const Values : array [ boolean ] of string = ( '0', '1' ) ;
begin
   Result := Values [ value ] ;
end;

var i, j : integer;
begin
saveDialog1.InitialDir := GetCurrentDir;
s:='';
for i:=0 to 61 do
  for j:=0 to 81 do
    s:=s+BoolToStr(map1[i,j].life);
if SaveDialog1.Execute then begin
  map:=TiniFile.Create(SaveDialog1.FileName);
  map.WriteString('map', 's', s);
  map.Free;
  ShowMessage(IntToStr(length(s))); //выводит "5084"
  s:='';
end;
end;
потом считываю эти данные
Код:
procedure TForm1.Loadmap1Click(Sender: TObject);
var i,j : integer;
begin
openDialog1.InitialDir := GetCurrentDir;
if OpenDialog1.Execute then begin
  map:=TiniFile.Create(OpenDialog1.FileName);
  s:=map.ReadString('map', 's', '0');
  map.Free;
  ShowMessage(IntToStr(length(s))); //выводит 2047
  if length(s)=5084 then begin
    for i:=0 to 61 do
      for j:=0 to 81 do begin
        try
          map1[i,j].life:=StrToBool(s[i*81+j+1]);
        finally

        end;
      end;
  end
  else Showmessage('Error! Incorrect map file!');
end;
s:='';
end;
почему возникает разница в длине считанной строки? открываю блокнотом ini файл, длина s = 5084
marwell. вне форума Ответить с цитированием
Старый 02.06.2013, 17:49   #2
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

ну это особенность работы ini файлов, вот код ReadString:
Код:
function TIniFile.ReadString(const Section, Ident, Default: string): string;
var
  Buffer: array[0..2047] of Char;
begin
                                                                                                   
  SetString(Result, Buffer, GetPrivateProfileString(PChar(Section),
    PChar(Ident), PChar(Default), Buffer, Length(Buffer), PChar(FFileName)));
end;
можно вместо этой функции использовать свою
Код:
program Project70;

uses
  Winapi.Windows,
  System.IniFiles;

function ReadString(const FileName,Section, Ident, Default: string): string;
var
  Buffer: array[word] of Char;
begin
  SetString(Result, Buffer, GetPrivateProfileString(PChar(Section),
    PChar(Ident), PChar(Default), Buffer, Length(Buffer), PChar(FileName)));
end;

procedure WriteIni;
var
  s:string;
  i:integer;
  ini:TIniFile;
begin
  SetLength(s,5084);
  for i:=1 to 5084 do s[i]:='0';
  CreateDirectory('C:\initest',nil);
  ini:=TIniFile.Create('C:\initest\1.ini');
  ini.WriteString('map', 's', s);
  ini.Free;
end;

procedure ReadIni;
var
  s:string;
begin
  s:=ReadString('C:\initest\1.ini','map','s','');
  if Length(s)=5084 then Writeln('success')
  else Writeln(Length(s));
end;

begin
  AllocConsole;
  WriteIni;
  ReadIni;
  Readln;
end.
пыжок

Последний раз редактировалось maloun; 02.06.2013 в 17:53.
maloun вне форума Ответить с цитированием
Старый 02.06.2013, 17:56   #3
marwell.
Пользователь
 
Регистрация: 05.12.2012
Сообщений: 63
По умолчанию

спасибо!
marwell. вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение ключа из ini файла NapalmRain C# (си шарп) 4 06.05.2011 01:27
чтение ini файла Жека_ Общие вопросы C/C++ 4 01.05.2011 08:52
Чтение с INI файла. Baaandit Общие вопросы Delphi 3 26.11.2009 17:15
Чтение пароля с ini файла mish@ Общие вопросы Delphi 7 05.11.2009 10:43