当前位置:编程学习 > C#/ASP.NET >>

.net怎么实现读取规则text文本内容为二维数组

问题举例现有text文件myInfo.txt内容:
----------------------------------------------
<REC>
<单位名称>=中韩合资松宇(苏州)服务中心
<单位地址>=苏州市柳巷41号*养育巷旭日装饰左侧)
<邮编>=
<联系人>=李先生
<电话>=0512-68878258
<传真>=0512-65210261
<手机>=13382108888
<E-mail>=szytbz@126.com
<网址 >=www.szytbz.com
<主要产品>=液体壁纸
<类别>=
<备注>=
<REC>
<单位名称>=中美合资大宇(苏州)服务中心
<单位地址>=杭州市柳巷41号*养育巷旭日装饰左侧)
<邮编>=
<联系人>=钱先生
<电话>=0522-68878258
<传真>=0522-65210261
<手机>=13482108888
<E-mail>=dfsbz@126.com
<网址 >=www.sffsddstbz.com
<主要产品>=活体壁纸
----------------------------------------------------
我想得到以<REC>为分隔符,然后又以<REC>模块下各行为二维内容的二维数组,用.net(C#)怎么实现?

结果比如我生成了 arr这个二维数组,得到结果举例:
arr(0,0):<单位名称>=中韩合资松宇(苏州)服务中心
arr(0,1):<单位地址>=苏州市柳巷41号*养育巷旭日装饰左侧)

arr(1,0):<单位名称>=中美合资大宇(苏州)服务中心
arr(1,1):<单位地址>=杭州市柳巷41号*养育巷旭日装饰左侧)

在线等···急急急急···

--------------------编程问答-------------------- StreamReader每次读一行,判断是否<REC>,然后自己处理。 --------------------编程问答-------------------- 给REC个值    1 ,0   进行判断 --------------------编程问答-------------------- 你这样不嫌麻烦吗,一行放一个数组? --------------------编程问答-------------------- 一行一行的处理 --------------------编程问答--------------------
 string path = @"D:\3.txt";//读取文件txt
        StringBuilder sb = new StringBuilder();
        int index = 0;//存放第几行。
        using (FileStream fs = new FileStream(path, FileMode.Open))
        {
            using (StreamReader sr = new StreamReader(fs))
            {
                while (!sr.EndOfStream)
                {
                    index++;//循环一遍+1,大于1就是第二行
                    string sLine = sr.ReadLine();
                    if (sLine.Length < 1)
                    {
                        continue;
                    }
                    if (index > 1)//去掉rec。从rec下面的行开始执行
                    {
                        string[] test1 = sLine;
                        foreach (string s in test1)
                        {
                            sb.Append(s.Trim() + "</br>");//你放二维数组这里。
                        }
                    }
                }
            }
        }
自己看着改吧改吧。 --------------------编程问答-------------------- 你这样还不如做成xml格式的文件,
读取又快又方便 --------------------编程问答-------------------- 同意XML格式文件,或者<REC>改为<REC1> <REC2> 这样加个编号,容易获取,使用API函数直接读


--------------------编程问答-------------------- 使用rec分割以后,
笨办法是使用<>分割得到的一条记录,
得到每一个数据。 --------------------编程问答--------------------
引用 7 楼 qq598235031 的回复:
同意XML格式文件,或者<REC>改为<REC1> <REC2> 这样加个编号,容易获取,使用API函数直接读

XML格式,下面的操作员根本不会。还有我举例的格式规范<REC><单位名称>=什么的都是可以变换的。只要遵从一定的规律就行。最终的目的是把数据对应的存入数据库。
在导入数据的时候可以让操作员自己定义分隔符(<REC>)和跟数据库匹配的字段(<单位名称>=对应db.CorpName)

我自己也想到一个办法,就是不用二维数据,直接定义一维数组,我叫操作员把text中的<REC>下模块换行改为“|”。这样,我取得一维数组的数据时做循环,再根据“|”进行分割,然后对应赋值存入数据库。

我现在想问下,我上面的方法和一楼说到的“StreamReader每次读一行,判断是否<REC>,然后自己处理。”效率哪个高,请有经验的高手分析解答下。 --------------------编程问答-------------------- 使用 xml存储数据 读写用api很方便 用txt还要自己写方法 不值得 --------------------编程问答--------------------
引用 9 楼 limfungsuen 的回复:
引用 7 楼 qq598235031 的回复:

同意XML格式文件,或者<REC>改为<REC1> <REC2> 这样加个编号,容易获取,使用API函数直接读

XML格式,下面的操作员根本不会。还有我举例的格式规范<REC><单位名称>=什么的都是可以变换的。只要遵从一定的规律就行。最终的目的是把数据对应的存入数据库。
在导入数据的时候可以让操作员自己定义分隔符(<REC>)和跟数据……

都太麻烦了,而且数据少点还行,
如果多了就性能就不行了。
作为程序员,
你稍微培训下操作员就可以了,
最多半个小时就会,
或者你封装好,
再让下面调用也行 --------------------编程问答-------------------- 很怀疑你这个文本是不是ini格式的写法,

ini有API读写的 --------------------编程问答--------------------
引用 11 楼 ohkuy 的回复:
引用 9 楼 limfungsuen 的回复:
引用 7 楼 qq598235031 的回复:

同意XML格式文件,或者<REC>改为<REC1> <REC2> 这样加个编号,容易获取,使用API函数直接读

XML格式,下面的操作员根本不会。还有我举例的格式规范<REC><单位名称>=什么的都是可以变换的。只要遵从一定的规律就行。最终的目的是把数据对应的存入数据库。
在导入数据的时……

现在我发现一个问题,用txt的话,我是一个个去判断,是麻烦...
不过用xml也存在一个问题,就是业务逻辑xml传入的节点名称可以随意命名的(领导强行规定的)。但是操作员在导入的时候,需要添加匹配规则来匹配对应的数据库字段。通过规则添加比如生成这么个规则“name=CI_CorpName;email=CI_Email;address=CI_Address;”
表示节点name对应数据库字段CI_CorpName,后面类推。
我通过XmlTextReader textReader = new XmlTextReader(FileUploadXml.PostedFile.FileName);
开始read后,要怎么去处理这里的对应??
我是用存储过程写的添加功能。
比如如果是name节点,则数据库字段实体类 dataInfo.CI_CorpName=name节点的值。后面类推...
这里的逻辑应该怎么处理??
--------------------编程问答--------------------
引用 13 楼 limfungsuen 的回复:
引用 11 楼 ohkuy 的回复:
引用 9 楼 limfungsuen 的回复:
引用 7 楼 qq598235031 的回复:

同意XML格式文件,或者<REC>改为<REC1> <REC2> 这样加个编号,容易获取,使用API函数直接读

XML格式,下面的操作员根本不会。还有我举例的格式规范<REC><单位名称>=什么的都是可以变换的。只要遵从一定的规律就行。最终的目的是……


最傻的办法就是一个个对值进行判断·然后再赋值...有没有什么简便的方法。 --------------------编程问答-------------------- 还是没有回复吗,估计我说的不够清楚,我再描述下:
有这么个xml文件(要说明的是,a,b,c名称不固定的,可以改成,c,d,e;具体通过定义匹配字段进行数据库字段匹配):
<NewDataSet>
<Table>
  <a>1</a> 
  <b>a0001</b> 
  <c>small car</c> 
</Table>
<Table>
  <a>2</a> 
  <b>b0001</b> 
  <c>big car</c> 
</Table>
</NewDataSet>

数据库表table:[name][item][detail][pic][oprator][opDate]


操作的时候组织好匹配规则,a假设对name,b假设对应detail,c假设不是需求数据不进行定义,即:{a=name,b=detail,},然后进行匹配导入。

现在有个问题是怎么方便的把xml节点数据根据匹配规则导入到对应的数据库表中。

因为a,b,c名称都是可变的..对应规则也只能通过匹配规则获取。

我直接把xml的节点名称用匹配规则解析出来的内容赋值上,然后实体类也是这样的操作,貌似不支持这种写法的....这样我就暂时无解了...(还有一种方法就是强制要求操作员直接把xml节点和数据库字段匹配替换,这是我现在想到的唯一方法。无形中加大了操作员的工作,一个不仔细还导入失败。)
所以想请高手指教 通过解析匹配规则,有咩有简便的方法实现??????

--------------------编程问答-------------------- 多做一步,把此数据格式转成excel,毕竟有规则,然后再转sql(要不要再转随你)。这样可能已经很好处理了。具体怎么导成excel,不懂你再问我,如果此方法可行的话! --------------------编程问答--------------------
string str = @"<REC>
 <单位名称>=中韩合资松宇(苏州)服务中心
 <单位地址>=苏州市柳巷41号*养育巷旭日装饰左侧)
 <邮编>=
 <联系人>=李先生
 <电话>=0512-68878258
 <传真>=0512-65210261
 <手机>=13382108888
 <E-mail>=szytbz@126.com
 <网址 >=www.szytbz.com
 <主要产品>=液体壁纸
 <类别>=
 <备注>=
 <REC>
 <单位名称>=中美合资大宇(苏州)服务中心
 <单位地址>=杭州市柳巷41号*养育巷旭日装饰左侧)
 <邮编>=
 <联系人>=钱先生
 <电话>=0522-68878258
 <传真>=0522-65210261
 <手机>=13482108888
 <E-mail>=dfsbz@126.com
 <网址 >=www.sffsddstbz.com
 <主要产品>=活体壁纸";
            var ary = Regex.Matches(str, @"<REC>\s*<单位名称>=(\S*)\s*<单位地址>=(\S*)\s*").Cast<Match>().Select(t => new { 单位名称 = t.Groups[1].Value, 单位地址 = t.Groups[2].Value }).ToArray();
           
--------------------编程问答-------------------- 除 --------------------编程问答-------------------- 使用.net framework正规、现成的xml解析程序,不要自己从低级的角度去写。

这是讲求效率的公司里的基本做法。当然如果你是学生,一定要自己重写xml解析程序,那么也应该读懂一两种现成的类库的源代码(.net framework本身就是开源的),而不要自己去空想什么xml解析程序。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,