且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在C#中使用正则表达式解析文本文件的多个部分

更新时间:2023-09-02 18:33:52

这里是一个简单的解析器

Here is a simple parser

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Section> sections = new List<Section>();
            string input =
               "START-OF-DATA\n" +
               "#100846105\n" +
               "START SECURITY|US912810DZ85|CBBT|\n" +
               "## in: 20150430_14:59:00 to 20150430_15:00:00 [13 (New York-DST)]\n" +
               "## out:20150430_14:59:00 to 20150430_15:00:00 [13 (New York-DST)]\n" +
               "04/30|15:00:00|B|118.640625||| |A|118.703125||| ||\n" +
               "04/30|14:59:54|B|118.6328125||| |A|118.6953125||| ||\n" +
               "04/30|14:59:52|B|118.6328125||| |A|118.6953125||| ||\n" +
               "04/30|14:59:23|B|118.6328125||| |A|118.6953125||| ||\n" +
               "04/30|14:59:20|B|118.6328125||| |A|118.6953125||| ||\n" +
               "END SECURITY|US912810DZ85|0|\n" +
               "#100846111\n" +
               "START SECURITY|US912810EA26|CBBT|\n" +
               "## in: 20150430_14:59:00 to 20150430_15:00:00 [13 (New York-DST)]\n" +
               "## out:20150430_14:59:00 to 20150430_15:00:00 [13 (New York-DST)]\n" +
               "04/30|15:00:00|B|124.75||| |A|124.828125||| ||\n" +
               "04/30|14:59:55|B|124.75||| |A|124.8203125||| ||\n" +
               "04/30|14:59:53|B|124.7421875||| |A|124.8203125||| ||\n" +
               "04/30|14:59:45|B|124.7421875||| |A|124.8125||| ||\n" +
               "04/30|14:59:43|B|124.7421875||| |A|124.828125||| ||\n" +
               "04/30|14:59:27|B|124.7421875||| |A|124.8125||| ||\n" +
               "04/30|14:59:24|B|124.7421875||| |A|124.828125||| ||\n" +
               "04/30|14:59:22|B|124.7421875||| |A|124.8125||| ||\n" +
               "04/30|14:59:20|B|124.7421875||| |A|124.828125||| ||\n" +
               "04/30|14:59:13|B|124.7421875||| |A|124.8125||| ||\n" +
               "END SECURITY|US912810EA26|0|\n" +
               "END-OF-DATA\n";


            StringReader reader = new StringReader(input);
            string inputLine = "";
            Section newSection = null;
            while ((inputLine = reader.ReadLine()) != null)
            {
                inputLine = inputLine.Trim();
                if (inputLine.StartsWith("#"))
                {
                    if (inputLine.Contains("in:")) continue;
                    if (inputLine.Contains("out:")) continue;
                    newSection = new Section();
                    sections.Add(newSection);
                    newSection.iD = inputLine.Substring(1);
                    newSection.data = new List<string>();

                }
                else
                {
                    if (inputLine.Substring(0, 3) == "END") continue;
                    if (inputLine.Substring(0, 5) == "START") continue;
                    newSection.data.Add(inputLine);
                }
            }

        }
        public class Section
        {
            public string iD { get; set; }
            public List<string> data { get; set; }
        }
    }

}