来如风快来指点ini问题 (100分)

  • 主题发起人 主题发起人 qingrj
  • 开始时间 开始时间
Q

qingrj

Unregistered / Unconfirmed
GUEST, unregistred user!
我有几百个数据,放在注册表里有些过分,我现在想把它放在ini文件里,但原来读一批数据在注册表可轻松实现,如读从11到20(动态决定):
for k:=11 to 20 do begin
jl[k]:=MyRegistry.Readstring('jl['+IntToStr(k)+']');
end;
dab 但在ini中变化的变量值不知怎么存取.请指点!
 
Uses IniFiles;
{=================================================================
功 能: 保存INI文件数据
参 数: Datatext:保存数据 header:数据头 FileName:文件名 FileHeader:体头
返回值: 无
=================================================================}
Procedure SaveIniFile(Datatext, header, FileName, FileHeader: String);
var
ServerIni:TinIfile;
Begin
If Not DirectoryExists(ExtractFileDir(ParamStr(0))+'/UserIni/') Then
CreateDir(ExtractFileDir(ParamStr(0))+'/UserIni/');
ServerIni:=TInIfile.Create(ExtractFilePath(ParamStr(0)) +'/UserIni/'+ FileName);
ServerIni.WriteString(FileHeader, header, Datatext);
ServerIni.UpdateFile;
ServerIni.Free;
end;

http://www.delphibbs.com/delphibbs/dispq.asp?lid=2224935
 
好象风马牛不相及!我的动态读取数据并没有解决!
 
{=================================================================
功 能: 获取INI文件数据
参 数: header:数据头 FileName:文件名 FileHeader:体头
返回值: 字符
=================================================================}
Function GetIniFile(header, FileName, FileHeader: String): String;
var
ServerName: String;
ServerIni:TinIfile;
Begin
Result:='';
If Not FileExists(ExtractFilePath(ParamStr(0)) +'/UserIni/'+ FileName) Then Exit;
ServerIni := TInIfile.Create(ExtractFilePath(ParamStr(0)) +'/UserIni/'+ FileName);
ServerName := ServerIni.ReadString(FileHeader, header, '');

ServerIni.Free;
Result := ServerName;
end;

http://www.delphibbs.com/delphibbs/dispq.asp?lid=2224935
 
你看看ini的帮助
readstring
readinteger
readbool
readsection
readsections
readsectionvalues
getprivateprofilestring
writeprivateprofilestring
writestring/integer/bool
deletekey
按变量读关键是你的ini文件要作成合适的形式
比如
[a]
a1=……
a2=……
……
 
这个函数有些看不懂!
我现在就想动态读取数据,如对于数组jl[k],k取随机数(即K:=random(100)),怎么在ini文件中读取!
来如风:刚看到回复,我已把ini文件改了过来.
[a]
a1=……
a2=……
……
a100=……
现在当如何当K:=random(100),如何读取ak!!
 
yourinifile.readstring('a','a'+inttostr(k),'却省值');
//random(100)结果是1~100吗?如果是0~99最好要+1
返回的结果是字符串型的,没有读取到的话结果是‘却省值’
 
INI和注册表的操作方式基本上完全一致,只是具体的函数不一样而矣!

前面的DFW给的建议就是写的和读取的一定要保持一致。
记得Delphi的demo里有一个关于数据库的例子中,就是用的ini文件来保存你访问过的数据库。结构正如楼主的需求。
 
来如风,
要命!我怎么读的都是"却省值"
 
var
Sec: TStrings;
Ini:Tinifile;
I: integer;
begin
ini := TInifile.create(filename);
sec := TStringList.create;
ini.GetSections(sec);//大约是这个函数,如果不是,请自己看TIniFile的文档
for i := 0 to sec.count - 1 do
begin
//做你想做的事
end
.......
end;
 
我的ini文件是这样的:
[a]
a1=12
a2=32
a3=23
a4=1423
而程序是这样写的没有问题的!!你看看好了!!
uses
iniFiles;
procedure TForm1.Button1Click(Sender: TObject);
var
a:TiniFile;
b:string;
begin
a:=TiniFile.Create('E:/my/Delphi/a.ini');
b:=a.ReadString('a','a'+inttostr(2),'null');
showmessage(b);//结果正确为32呀!!
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
a: TiniFile;
b: string;
i: integer;
begin
try
a := TiniFile.Create('d:/a.ini');
for i := 0 to memo1.Lines.Count - 1 do
begin
a.WriteString('a', 'a' + inttostr(i), memo1.Lines);
end;
a.WriteInteger('a','Count',i);
finally
if assigned(a) then
freeandnil(a);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
a: TiniFile;
b: string;
i, count: integer;
begin
memo1.Lines.Add(#13 + 'After Read:');
try
a := TiniFile.Create('d:/a.ini');
count := a.ReadInteger('a','count',0);
for i := 0 to Count - 1 do
begin
memo1.Lines.Add(a.ReadString('a', 'a' + inttostr(i),'null'));
end;
finally
if assigned(a) then
freeandnil(a);
end;
end;

上面代码经过测试。
 
后退
顶部