用IO流读取trs文件

   最近的一个任务   .trs文件其实跟.txt差不多    具体有什么区别咱分的不是很清楚了   只知道读取是一样的    先看.trs文件格式    然后看代码吧      我读取的.trs文件有3.5M  读取所耗费的时间有2分多钟    不知道是不是自己读取的效率有问题     希望有高手能够给个意见     代码用到了正则     有用到的朋友   格式差不多的话    只需要改正则了  

 

   .trs文件格式内容:

 

   <REC>
<报名>=四川日报
<期号>=
<引题>=
<标题>=省九届人大常委会第二十次会议闭会
<副题>=谢世杰主持并讲话通过《四川省森林公园管理条例》等法规,决定省九届人大四次会议2001年2月6日召开
<作者>=
<日期>=2000.12.01
<版次>=1
<版名>=
<版条>=是
<栏目>=
<分类>=四川人大;我国自然资源
<分类号>=B3;Oj2
<关键字>=
<信息编辑>=
<坐标>=2179,57,4122,551
<下转>=200012010409
<正文>=  <IMG=200012> <IMG=2001211>  本报讯  省九届人大常委会第二十次会议11月30日在成都举行第三次全体会议
,省人大常委会主任谢世杰主持会议。会议在圆满完成各项议程后闭会。
    会议表决通过了《四川省森林公园管理条例》、《四川省<中华人民共和国节约
能源法>实施办法》、《四川省华侨投资权益保护条例》和《四川省人民代表大会常
务委员会关于召开四川省第九届人民代表大会第四次会议的决定》、《四川省第九
届人民代表大会常务委员会代表资格审查委员会关于代表资格的审查报告》,通过
了省人大7个专门委员会关于省九届人大三次会议主席团交付审议的代表提出的议案
审议结果的报告。会议批准了《成都市消防条例》、《成都市城市供水管理条例》
和《成都市性病艾滋病防治管理条例》。
    会议通过了人事任免事项。
    谢世杰在会议结束时就认真贯彻落实十五届五中全会精神,做好人大工作讲了
话。他强调,要深刻领会党的十五届五中全会精神,牢牢把握全省工作大局。谢世
杰指出,贯彻落实五中全会精神,要认真扎实地做好人大的各项工作。首先,做好
今年年末5项工作,为明年开局打好基础。一是立法工作要在增强地方特色,提高法
规质量上下功夫。(紧转第四版)(紧接第一版)要建立立、改、废三者并举的良性运
行机制,抓紧做好地方立法程序性法规的审议颁布工作。立法工作中要尽力防止部
门利益法律化。二是监督工作要加大力度,增强实效。他强调,要督促各级政府在
实施西部大开发战略、经济结构调整、国有企业改革、科技创新、发展民营经济、
减轻农民负担、落实社会保障等方面加大工作力度。在监督方式上,要把对事和对
人的监督有机结合起来。三是在法制宣传教育方面,要以贯彻依法治国方略、推进
依法治省,贯彻落实依法治省经验交流会精神为重点,加大执法和法制宣传教育力
度。四是代表工作要落实“百千万”活动,改进办法,提高工作质量。五是搞好人
大的自身建设,重点是增强公仆意识和责任意识,提高法律素质,为全省人民树立
表率。
    省人大常委会副主任孟俊修、牟绪珩、孙自强、刘子寿、李永寿、张宗源、刘
永顺、张国辉、卢铁城,秘书长杨启泉和委员共74人出席会议。
    副省长王恒丰,省高级人民法院院长敬瑞祥,省人民检察院检察长韩忠信等列
席会议。
    省政协副主席郝振贤应邀列席会议。
<图片>=

 

 

   代码如下:

 

 

  using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO; using System.Text.RegularExpressions; /// <summary> ///TransferTRSCreateList 的摘要说明 /// </summary> namespace TrsTransfer { public class TransferTRSCreateList { public TransferTRSCreateList() { // //TODO: 在此处添加构造函数逻辑 // } public List<TrsPageInfo> TRSCreateList(string pathName)//传入trs路径 { using (FileStream fs = new FileStream(pathName, FileMode.Open, FileAccess.Read)) { StreamReader sr = new StreamReader(fs, System.Text.Encoding.GetEncoding("UTF-8"));//转换为utf-8中文格式,不然会出现乱码 string line = sr.ReadToEnd();//读出出来后加入内存 string[] content = line.Split(new string[] { "<REC>" }, StringSplitOptions.None);//截取所有<REC> List<TrsPageInfo> trsPageInfoList = new List<TrsPageInfo>();//定义一个泛型对象 for (int i = 0; i < content.Length; i++)//循环获取没个<REC>里面内容 { if (content[i].ToString() != "")//判断是否为空 { TrsPageInfo transferInfo = new TrsPageInfo(); transferInfo = trsPage(content[i]);//用正则匹配将匹配后的内容添加到TrsPageInfo对象 trsPageInfoList.Add(transferInfo);//将对象添加到泛型中 } } sr.Close(); return trsPageInfoList;//返回一个包含所有TrsPageInfo对象的泛型 } } public string GetTitle(string text, string name)//匹配每一个<REC>对象,参数一是整个<REC>对象,参数二是需要匹配的名称 { Regex rg = null; if (name == "正文")//匹配正文 { rg = new Regex(@"/<正文/>=([^*]+)<图片", RegexOptions.IgnoreCase | RegexOptions.Compiled); Match m = rg.Match(text); string context = Regex.Replace(m.Groups[1].Value, @" </?IMG[^>]*>", "");//如果正文里面出现<IMG>将其用正则移出掉 return context; } else if (name == "正文图片")//匹配正文图片 { rg = new Regex(@"/<IMG=([^*>/r/n<]+)", RegexOptions.IgnoreCase | RegexOptions.Compiled);//正则匹配<IMG>正文图片 MatchCollection mc = rg.Matches(text); string strMatch = ""; foreach (Match match in mc)//循环获取多张正文图片 { GroupCollection groups = match.Groups; strMatch += groups[1].Value + ","; } return strMatch; } else { rg = new Regex(@"/<" + name + "//>=([^*/r/n<]+)", RegexOptions.IgnoreCase | RegexOptions.Compiled);//匹配所需要的名称 } Match mt = rg.Match(text); return mt.Groups[1].Value; } public TrsPageInfo trsPage(string content)//获得匹配后的内容 { List<ImageBean> listImageBean = new List<ImageBean>(); TrsPageInfo transferInfo = new TrsPageInfo(); transferInfo.PaperName = GetTitle(content, "报名"); transferInfo.PublishId = GetTitle(content, "期号"); transferInfo.IntroTitle = GetTitle(content, "引题"); transferInfo.Title = GetTitle(content, "标题"); transferInfo.SubTitle = GetTitle(content, "副题"); transferInfo.Author = GetTitle(content, "作者"); transferInfo.Date = GetTitle(content, "日期"); transferInfo.PageIndex = GetTitle(content, "版次"); transferInfo.PageName = GetTitle(content, "版名"); transferInfo.Programa = GetTitle(content, "栏目"); transferInfo.Types = GetTitle(content, "分类"); transferInfo.PointList = GetTitle(content, "坐标"); transferInfo.Content = GetTitle(content, "正文"); string[] imagebean = GetTitle(content, "正文图片").Split(','); for (int i = 0; i < imagebean.Length - 1; i++)//循环获得多个正文图片 { ImageBean imageBean = new ImageBean(); imageBean.PathName = imagebean[i]; listImageBean.Add(imageBean);//将多个正文图片添加到泛型 } transferInfo.imageBean = listImageBean; transferInfo.ImageUrl = GetTitle(content, "图片"); return transferInfo;//返回TrsPageInfo对象 } } }

 

你可能感兴趣的:(用IO流读取trs文件)