再问一个有关TstringList的问题

hgb_kkh 2003-09-14 09:56:37
程序希望能生成如下的文件:
[101001]
IFIELDS101001 =4

IFIELD1010011STARTPOS =16
IFIELD1010011LENGTH =6
IFIELD1010011TYPE =0

IFIELD1010012STARTPOS =22
IFIELD1010012LENGTH =12
IFIELD1010012TYPE =0

IFIELD1010013STARTPOS =48
IFIELD1010013LENGTH =8
IFIELD1010013TYPE =0

IFIELD1010014STARTPOS =71
IFIELD1010014LENGTH =11
IFIELD1010014TYPE =0

但是其中的IFIELDS101001的值只能在后续处理结束后才能确定。
现在我用TstringList先生成了“IFIELDS101001 =”,
最后处理时: stringList.Values['IFIELDS'+ValueE.Text+' ']:= inttostr(UnpackIndex-1);
结果文件生成如下:
[0001]
IFIELDS0001 =

IFIELD00011STARTPOS =1
IFIELD00011LENGTH =1
IFIELD00011TYPE =0

IFIELD00012STARTPOS =2
IFIELD00012LENGTH =4
IFIELD00012TYPE =0

IFIELD00013STARTPOS =6
IFIELD00013LENGTH =8
IFIELD00013TYPE =0

IFIELDS0001 ==3
请问我错在哪里?应该如何改正?
分不够再给。谢谢。
...全文
29 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hgb_kkh 2003-09-19
  • 打赏
  • 举报
回复
?????????????????????????
IORILI 2003-09-19
  • 打赏
  • 举报
回复
给你个例子:
procedure Tsysshezhi.FormCreate(Sender: TObject);
begin
IniFile:=tinifile.Create(datamodule2.GetIniFilePath);
datamodule2.NMFTP1.Port:=21;
datamodule2.NMFTP1.UserID:=inifile.readstring('ftp_user_id','user_id','');
datamodule2.NMFTP1.Password:=inifile.readstring('ftp_user_pw','user_pw','');
inifile.Free;
end;

procedure Tsysshezhi.Button1Click(Sender: TObject);
begin
IniFile:=tinifile.Create(datamodule2.GetIniFilePath);
if (trim(edtaddress.Text)='') and (trim(ftpaddress.Text)='') then
begin
inifile.Free;
end else begin
if trim(edtaddress.Text)<>'' then
inifile.WriteString('sever_ip','sever',trim(edtAddress.Text));
if trim(ftpaddress.Text)<>'' then
inifile.WriteString('ftp_sever','ftp_ip',trim(ftpaddress.Text));

//重新连接数据库
hgb_kkh 2003-09-19
  • 打赏
  • 举报
回复
自 up
hgb_kkh 2003-09-16
  • 打赏
  • 举报
回复
我用了,但是在执行到下面的语句时报告异常:
ServerN.Create(Path+'Address.ini');
ServerN.ReadSections(AddressBox.Items); ----》出异常处
异常:Access violation at address 003C0040. Read of address 003C0040.

Address.ini文件如下:
[SERVER1]
ADDRESS = 10.3.1.214
PORT = 4321

路径也是对的。
为什么会这样?
2353939 2003-09-15
  • 打赏
  • 举报
回复
用ini文件解决,自己可以查查帮助,同意楼上的
ebensy 2003-09-15
  • 打赏
  • 举报
回复
用inifiles类,根本不需要这末多算法,这个类封装了你需要的格式。
快快谢谢我吧,拿分来!!!!!!!!!!!!!!!!!!
hgb_kkh 2003-09-14
  • 打赏
  • 举报
回复
procedure TForm1.AddBClick(Sender: TObject);
var
Rtype : string;
begin
if (UnpackIndex = 0) then
begin
if (Index = 0) then
begin
FileText := TstringList.Create;
FileText.Add('[UNPACK]');
FileText.Add('KEYPOS ='+PosE.Text);
FileText.Add('KEYLENGTH ='+LengthE.Text);
Index :=Index + 4;
end;
FileText.Add('['+ValueE.Text+']');
FileText.Add('IFIELDS'+ValueE.Text+' ='); //生成IFIELDS0001 =
Index:= Index + 3;
inc(UnpackIndex);
end
else
begin
FileText.Add('IFIELD'+ValueE.Text+inttostr(UnpackIndex)+'STARTPOS ='+PosE.Text);
FileText.Add('IFIELD'+ValueE.Text+inttostr(UnpackIndex)+'LENGTH ='+LengthE.Text);
case TypeBox.ItemIndex of
-1: Rtype := '0';
0: Rtype := '0';
1: Rtype := '1';
2: Rtype := '10';
end;
FileText.Add('IFIELD'+ValueE.Text+inttostr(UnpackIndex)+'TYPE ='+Rtype);
Index := Index + 4;
inc(UnpackIndex);
end;
end
FileText.Add(#13);
end;


procedure TForm1.EndBClick(Sender: TObject);
var
FileName : string;
begin
//期望生成 IIFIELDS0001 = X(域数)
FileText.Values['OFIELDS'+ValueE.Text+' ']:= inttostr(PackupIndex);

if (ServerCheck.Checked = true) then
FileName := 'Serv'+ProjectE.Text+'.mod'
else
FileName := 'Client'+ProjectE.Text+'.mod';
FileText.SaveToFile(FileName);
end;
FrameSniper 2003-09-14
  • 打赏
  • 举报
回复
代码贴出来看看!

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧