TDbaFieldList.ExportToString

Модуль: dbaTypes
Класс: TDbaFieldList

Получить строку заданного формата, описываюшую содержимое

Объявление

function ExportToString(const ADelimeter: Char = '|';
	 const AFieldsSeparator: Char = ':'; const AParamsDelimeter: Char = ',';
	 const AParamsSeparator: Char = '=';
	 const AQuotationChar: Char = '"'): string;

Параметры

ADelimeter
Символ-разделитель полей
AFieldsSeparator
Символ-разделитель полей и их параметров
AParamsDelimeter
Символ-разделитель параметров
AParamsSeparator
Символ-разделитель параметра и его значения
AQuotationChar
Символ-кавычка для обособления параметров/значений параметров

Возвращает

Строка заданного формата, пустая строка в случае ошибки

Описание

Пример использования

В приведенной ниже процедуре решается задача получения описания списка полей в xml-формате

    function GetFieldListInfoXML(const AFieldList: TDbaFieldList; FieldsAsNodes: Boolean = false;
      const ARootName: string = 'Fields'; const AChildName: string = 'Field'): string;
    var
      Xml: TNativeXml;
      XmlNode: TXmlNode;
      FieldsListParser,FieldParamsParser: TStringList;
      FieldsDelimeter,FieldsSeparator,ParamsDelimeter,ParamsSeparator,QuotationChar: Char;
      FieldsParamsStr, NodeName,ParamName: string;
      I,J: Integer;
    begin
      Result:= '';

      if AFieldList = nil then
        Exit;

      FieldsDelimeter:= '|'; // разделитель полей
      FieldsSeparator:= ':'; // разделитель полей и их параметров
      ParamsDelimeter:= ','; // разделитель параметов поля
      ParamsSeparator:= '='; // разделитель параметра поля и его значения
      QuotationChar:= '"';   // символ кавычек

      FieldsParamsStr:= // получаем список параметров полей
        AFieldList.ExportToString(FieldsDelimeter,FieldsSeparator,ParamsDelimeter,
          ParamsSeparator,QuotationChar);

      if FieldsParamsStr = '' then
        Exit;

      FieldsListParser:= TStringList.Create();  // создаем списки для обработки
      FieldParamsParser:= TStringList.Create();
      Xml:= TNativeXml.CreateName(ARootName);
      Xml.XmlFormat:= xfReadable; // удобочитаемый вид узлов
      Xml.EncodingString:= 'windows-1251';
      try // настраиваем списки
        FieldsListParser.Delimiter:= FieldsDelimeter;
        FieldsListParser.NameValueSeparator:= FieldsSeparator;
        FieldsListParser.QuoteChar:= QuotationChar;

        FieldParamsParser.Delimiter:= ParamsDelimeter;
        FieldParamsParser.NameValueSeparator:= ParamsSeparator;
        FieldParamsParser.QuoteChar:= QuotationChar;

        FieldsListParser.DelimitedText:= FieldsParamsStr; // разбираем список полей

        for I:= 0 to FieldsListParser.Count -1 do
        begin
          if FieldsAsNodes then
            begin
              NodeName:= FieldsListParser.Names[I];
              XmlNode:= Xml.Root.NodeFindOrCreate(NodeName); // узел с именем поля
            end
          else
          begin
            NodeName:= AChildName;
            XmlNode:= Xml.Root;
          end;


          FieldParamsParser.DelimitedText:= FieldsListParser.ValueFromIndex[I]; // список параметров
          
          for J:= 0 to FieldParamsParser.Count -1 do
          begin
            ParamName:= FieldParamsParser.Names[J];
            if not (FieldsAsNodes) and (ParamName = TDbaFieldInfoParametersNames[0]) then
              XmlNode:= XmlNode.NodeNew(AChildName)
            else
            if (FieldsAsNodes) and (ParamName = TDbaFieldInfoParametersNames[0]) then
              Continue;

            XmlNode.WriteAttributeString(ParamName,FieldParamsParser.ValueFromIndex[J]);
          end;
        end;
        
        Result:= Xml.Root.WriteToString;
      finally
        FieldsParamsStr:= '';
        FreeAndNil(FieldsListParser);
        FreeAndNil(FieldParamsParser);
        FreeAndNil(Xml);
      end;

    end;
    

Смотри также

TDbaFieldInfo.ExportToString
сохранить параметры в строку заданного формата