现在有一个文本文件,文件内容类似下面: <Database Hostname = "localhost" Username = "root" Password = "root" Name = "test" Port = "3306" Type = "1"> 
<Listen Host="0.0.0.0" 
WorldServerPort = "8129"> 
....... 我想编写一个函数来读取Database 内的Hostname后面的值(即localhost)、Username后面的值(root)、以及:onewow、3306、0.0.0.0等数据。 可能说的不太清楚,不知道有没有人能够提供一下思路或者程序代码?

解决方案 »

  1.   

     明白你的意思,经常需要这样的提取信息的操作.
    ///定义一个函数MidStr,三个参数分别是要提取的字符,左特征字符,右特征字符
    function MidStr(StrSource,StrLeft,StrRight:string):string;
    var PosLeft,PosRigth,PosStart,StrLen:integer;
    begin
        PosLeft:=pos(StrLeft,StrSource);
        PosRigth:=pos(StrRight,StrSource);
        StrLen:=PosRigth-PosLeft-length(StrLeft);
        PosStart:= PosLeft+length(StrLeft);
        if (PosLeft>0) and (PosRigth>PosLeft) then
        begin
            Result:=copy(StrSource,PosStart,StrLen);
        end else  Result:='';
    end;////////////////调用
    var
    StrSource,StrLeft,StrRight:string;
    begin
    StrSource:='<Database Hostname = "localhost" Username = "root" Password = "root" Name = "test" Port = "3306" Type = "1" >';
    StrLeft:='Hostname = "';
    StrRight:='" Username ';
    edit1.Text := MidStr(StrSource,StrLeft,StrRight);//这里赋值给edit1控件
    end;
      

  2.   

    用xml解析器,uses msxml;
    var
      FDoc: IXMLDOMDocument;
      FNode: IXMLDOMNode;
    begin
      FDoc := CoDOMDocument.Create;
      if FDoc.loadXML('Your Data') then
      begin
        FNode := FDoc.selectSingleNode('Database/Hostname');
        if Assigned(FNode) then
          Result := FNode.nodeValue; // get value
      end;
    end;