如果是csv格式数据,尝试用对应的格式解析。
看格式如果每一列的占位数固定(包括空白在内),尝试用固定长度截取
我怎么区分它是不是每一列固定宽度呢,至少肉眼看起来是不一样的
@笔池: 跟数据生产者确定下他这个是什么规律的。
固定列宽不止包含数据,也包含空格在内一起,你贴的两条数据至少是固定宽度的。
至于有没有数据,截取出来再处理。
这TXT文档的格式,对齐相当好,所以你可以在这上面动脑筋。
很显然,每个字段都有一个强制性边界。比如,第一个字段最多14个字符(含“-”连接符),类似的方法,你可以避免空字段问题。
.首先你要问清楚提供这份txt文档的人,规则是什么,是以空格还是tab为分割,第一列是否都为数字等等,我不能想当然的以为规则就是这样啊?
1、先读取满足条件的数据行导入到Excel,每行根据空格分隔,数组长度为7就正确,这个没问题。
2、将剩下的文本保存为另一个新的文本文件f,如果f数据量很少,打开它,将一些占位空格按照你的规则填充特殊字符进去,比如XXXXX。然后再像1一样处理,替换特殊字符为空。但是如果f数据量很大,自求多福吧。
读出每行,然后根据每行的长度读取对应数据
一般这种文件对齐,要么是绝对对齐,要么是使用了tab对齐,在C#里对应的是 \t, 你可以都试试。实在不行可以考虑使用正则。
针对需要自定义转换——
空白的可能性有多种:
英文的空格、制表符,—— <128;
其他比如中文的空格,特殊符号等等...;
具体以该“符号”(空白符号)的 取出来 int 值进行判定。
对齐(制表符)——不一定就是真的对齐,是根据自己的软件来定义的,比如你在记事本看到是对齐,你换个文本显示那是完全可能不是对齐的,具体看约定。
不知道你具体怎么读取的,标准cvs dataset就可以的。
如果是标准的csv,那就找找相关的第三方类库。否则可以根据位移来确定
读取每一行,然后将得到的字符串用split()方法分割空字符串,然后可以得到每一个元素
应该只有基建燃油这一列可能为空吧 split 然后判断count 少一个 就是0
var newtxt = Regex.Matches(txt2, @"^(\S+)\s+(\S+(?:\s\S+)?)\s+(\S+)\s{6}(.*?)\s+(\S+)\s{4}(.*?)\s+(\d+)", RegexOptions.Multiline);