如何把listview中的数据利用.dat文件进行存取(不通过数据库)(50分)

  • 主题发起人 主题发起人 taxtax
  • 开始时间 开始时间
T

taxtax

Unregistered / Unconfirmed
GUEST, unregistred user!
我看过有一些程序把listview中的内容保存为.dat文件格式,可以不通过数据库进行存取。
不知如何实现,最好列出源码。不够可加分。
 
你最好告诉大家你具体不会的地方,比如写文件或者是遍历listview,
我觉得你这个问题没什么好讨论的,都是极简单的技术。你这样提问没人愿意回答你
 
‘极简单的问题’?如果会的话请回答,不会的话就不要乱发表看法
 
你说的 dat 文件格式使自己定义的文件格式起个.dat的文件后缀,还是有标准的dat文件
格式?如果是自定义的格式很简单,如果是标准的就要看是什么标准了。
 
如果只是一个扩展名,而文件格式是自定义的,可以使用设定标志来实现,比如

标题
◎子标题
#二级子标题
标题
◎子标题
#二级子标题
。。。。

可以检测◎还有#还有什么都没有来进行取,
存的时候可以按照类别存取。
 
//装载
procedure TForm1.FormCreate(Sender: TObject);
var
List: TStringList;
NewItem: TListItem;
I: Integer;
begin
// stops warning message
NewItem := nil;

// load the items
ListView1.Items.Clear;
List := TStringList.Create;
try
List.LoadFromFile (
ExtractFilePath (Application.ExeName) + 'Items.dat');
for I := 0 to List.Count - 1 do
if List [1] = #9 then
NewItem.SubItems.Add (Trim (List ))
else if List [1] = '@' then
NewItem.ImageIndex := StrToIntDef (List [2], 0)
else
begin
// a new item
NewItem := ListView1.Items.Add;
NewItem.Caption := List ;
end;
finally
List.Free;
end;
end;

//保存
procedure TForm1.FormDestroy(Sender: TObject);
var
I, J: Integer;
List: TStringList;
begin
// store the items
List := TStringList.Create;
try
for I := 0 to ListView1.Items.Count - 1 do
begin
// save the caption
List.Add (ListView1.Items.Caption);
// save the index
List.Add ('@' + IntToStr (ListView1.Items.ImageIndex));
// save the subitems (indented)
for J := 0 to ListView1.Items.SubItems.Count - 1 do
List.Add (#9 + ListView1.Items.SubItems [J]);
end;
List.SaveToFile (
ExtractFilePAth (Application.ExeName) + 'Items.dat');
finally
List.Free;
end;
end;

 
请问xianjun你的.dat文件是什么格式,文本格式吗?
 
文本格式
 
我是这样做的(把listView 控件中的东西保存为.ini 文件格式,同样,你也可以改为.dat)
//保存过程
myinifile:TInifile; //声明为全局变量
myinifile:=TInifile.Create(Edit1.Text+'.ini'); //edit1.text 为你要保存的文件名,
myinifile.WriteString('s'+inttostr(j),'姓名',edit3.Text );
//s 为一个标号 自己调试一下就知道了 j 是我计算的第几个记录,
myinifile.WriteString('s'+inttostr(j),'籍贯',Edit4.Text );
myinifile.WriteString('s'+inttostr(j),'学号',Edit5.Text );
myinifile.WriteString('s'+inttostr(j),'特长',Edit6.Text );
myinifile.WriteString('s'+inttostr(j),'附加信息',Edit7.Text );
//读取过程
//从保存的文件中读出依次[s 1]( 假设j为1 )中“籍贯”项的值,
//“学号”,“特长”, “附加信息”中的值,赋给Edit ,
Edit4.Text:=myinifile.ReadString('s'+inttostr(j),'籍贯','');
Edit5.Text:=myinifile.ReadString('s'+inttostr(j),'学号','');
Edit6.Text:=myinifile.ReadString('s'+inttostr(j),'特长','');
Edit7.Text:=myinifile.ReadString('s'+inttostr(j),'附加信息','');

如果还有什么不懂的话呢!
可以emil 给我,我把那个源代码给你!
 
补充几点:
List : TStrings; //初始化说明
ListView2.Items.Clear;
List := TStringList.Create;

myinifile.ReadSections(list);
for a := 1 to List.Count do begin //list.count 可以用j来 代替
if List[a-1][1] = 's' then
with ListView2.items.Add do //在listview 中显示 保存在文件中的每一个记录
begin
Caption := myinifile.ReadString(List[a-1],'姓名', '');//第一列必须为caption

SubItems.Add(myinifile.ReadString(List[a-1],'籍贯', '')); //第二列
SubItems.Add(myinifile.ReadString(List[a-1],'学号', '')); //第三列
SubItems.Add(myinifile.ReadString(List[a-1],'特长', '')); //第四列
SubItems.Add(myinifile.ReadString(List[a-1],'附加信息', ''));//第五列
SubItems.Add(List[a-1]);
end;
我的那个数据库程序就是这样做的,在每次输入一个新的记录后,就会调用上面的 语句来
全部更新,显示出来
 
TreeView本身的数据存储格式就可以存储成文本文件,当然也可以存成.dat文件了。连代码
都不用写。
TreeView1.SaveToFile('aa.dat')
 
我说的是标准.dat文件
 
.dat还有标准? 这倒是第一次听说 [8D]
能不能说来听听?[:)]
 
TreeView本身的数据存储格式就可以存储成文本文件
 
接受答案了.
 
后退
顶部