none
这种文件格式怎么读取方便 RRS feed

  • 问题

  • <测试数据A> = 
    {
    	<值> = 80 ;
    	<校验> =  "^\\d{2}$" ;
    	<提示> =  "2位数字组成" ;
    	<注释> =  "输入2位数字" ;
    };
    
    <测试数据B> = 
    {
    	<值> = 7500 ;
    	<校验> =  "^\d{4,5}$" ;
    	<提示> =  "5位数字组成" ;
    	<注释> =  "输入5位数字,单位米" ;
    };
    文件内容格式如上,这是种什么格式的文件?各位见多识广的老师请赐教小弟,该如何读取?全部读取后根据匹配找到要的内容是不是太麻烦?我看文件格式是固定,有规律的,然后方便地读取要的某一段内容?

    努力~

    2014年1月15日 3:35

答案

  • 有些像C#伪代码的写法。看上去像一个模板文件,肯定供某些插件或者程序使用。

    比如你要读取“测试数据A”下全部内容:

    using System;
    using System.Text.RegularExpressions;
     
    namespace CSharp
    {
        public class TestData
        {
            public static string[] GetTestData(string name)
            {
                Regex reg = new Regex("(?<=<"+name+">\\s+=\\s+{).+?(?=};)"RegexOptions.Singleline);
                string s = System.IO.File.ReadAllText("TextFile1.txt");
     
                //分离的内容
                string contents = reg.Match(s).Value;
                //再次分离
                Regex reg2 = new Regex("(?<=<[\u4E00-\u9FFF]+>\\s+=\\s+).+?(?=\\s+;)"RegexOptions.Singleline);
     
                string[] values = new string[4];
                int index = 0;
     
                foreach (Match item in reg2.Matches(contents))
                {
                    values[index++= item.Value;
                }
                return values;
            }
        }
     
        class Program
        {
            static void Main(string[] args)
            {
               string[]values = TestData.GetTestData("测试数据B");
                //获取某个属性
                Console.WriteLine(values[0]);
     
            }
        }
    }

    不过我建议最好有可能还是改为XML或者是序列化的写法,方便读取。


    ASP.NET Questions
    Other Discussions
    FreeRice Donate
    Issues to report
    Free Tech Books Search

    • 已标记为答案 zjyh16 2014年1月15日 14:34
    2014年1月15日 8:39
    版主

全部回复

  • 有些像C#伪代码的写法。看上去像一个模板文件,肯定供某些插件或者程序使用。

    比如你要读取“测试数据A”下全部内容:

    using System;
    using System.Text.RegularExpressions;
     
    namespace CSharp
    {
        public class TestData
        {
            public static string[] GetTestData(string name)
            {
                Regex reg = new Regex("(?<=<"+name+">\\s+=\\s+{).+?(?=};)"RegexOptions.Singleline);
                string s = System.IO.File.ReadAllText("TextFile1.txt");
     
                //分离的内容
                string contents = reg.Match(s).Value;
                //再次分离
                Regex reg2 = new Regex("(?<=<[\u4E00-\u9FFF]+>\\s+=\\s+).+?(?=\\s+;)"RegexOptions.Singleline);
     
                string[] values = new string[4];
                int index = 0;
     
                foreach (Match item in reg2.Matches(contents))
                {
                    values[index++= item.Value;
                }
                return values;
            }
        }
     
        class Program
        {
            static void Main(string[] args)
            {
               string[]values = TestData.GetTestData("测试数据B");
                //获取某个属性
                Console.WriteLine(values[0]);
     
            }
        }
    }

    不过我建议最好有可能还是改为XML或者是序列化的写法,方便读取。


    ASP.NET Questions
    Other Discussions
    FreeRice Donate
    Issues to report
    Free Tech Books Search

    • 已标记为答案 zjyh16 2014年1月15日 14:34
    2014年1月15日 8:39
    版主
  • 谢谢您的代码示例和建议,我再研究研究!我也觉得xml好用,可惜这个模板文件是别人写的程序所提供的,不知道为啥这个程序的作者采用这种格式!没法修改别人东西,可以的话真想改掉!

    努力~

    2014年1月15日 14:37