首页新闻找找看学习计划

C#读取txt写入到excel

1
悬赏园豆:100 [已关闭问题] 关闭于 2017-08-02 17:01

以上是txt文档的数据格式,我尝试读取行然后空格分隔但是不能得到结果,因为数据列也会存在空,请求帮助。

笔池的主页 笔池 | 初学一级 | 园豆:55
提问于:2017-07-31 14:34
< >
分享
所有回答(11)
0

如果是csv格式数据,尝试用对应的格式解析。

看格式如果每一列的占位数固定(包括空白在内),尝试用固定长度截取

hahanonym | 园豆:1453 (小虾三级) | 2017-07-31 14:46

我怎么区分它是不是每一列固定宽度呢,至少肉眼看起来是不一样的

支持(0) 反对(0) 笔池 | 园豆:55 (初学一级) | 2017-07-31 14:48

@笔池: 跟数据生产者确定下他这个是什么规律的。

固定列宽不止包含数据,也包含空格在内一起,你贴的两条数据至少是固定宽度的。

至于有没有数据,截取出来再处理。

支持(0) 反对(0) hahanonym | 园豆:1453 (小虾三级) | 2017-07-31 14:52
0

这TXT文档的格式,对齐相当好,所以你可以在这上面动脑筋。

很显然,每个字段都有一个强制性边界。比如,第一个字段最多14个字符(含“-”连接符),类似的方法,你可以避免空字段问题。

爱编程的大叔 | 园豆:29788 (高人七级) | 2017-07-31 14:47
0

.首先你要问清楚提供这份txt文档的人,规则是什么,是以空格还是tab为分割,第一列是否都为数字等等,我不能想当然的以为规则就是这样啊?

TCG2008 | 园豆:1145 (小虾三级) | 2017-07-31 14:53
0

1、先读取满足条件的数据行导入到Excel,每行根据空格分隔,数组长度为7就正确,这个没问题。

2、将剩下的文本保存为另一个新的文本文件f,如果f数据量很少,打开它,将一些占位空格按照你的规则填充特殊字符进去,比如XXXXX。然后再像1一样处理,替换特殊字符为空。但是如果f数据量很大,自求多福吧。

JeffWong | 园豆:2021 (老鸟四级) | 2017-07-31 17:09
0

读出每行,然后根据每行的长度读取对应数据

MrNice | 园豆:3003 (老鸟四级) | 2017-07-31 17:11
0

一般这种文件对齐,要么是绝对对齐,要么是使用了tab对齐,在C#里对应的是 \t,  你可以都试试。实在不行可以考虑使用正则。

沧海一杰 | 园豆:28 (初学一级) | 2017-07-31 17:31
0

针对需要自定义转换——

空白的可能性有多种:

英文的空格、制表符,—— <128;

其他比如中文的空格,特殊符号等等...;

具体以该“符号”(空白符号)的 取出来 int 值进行判定。

对齐(制表符)——不一定就是真的对齐,是根据自己的软件来定义的,比如你在记事本看到是对齐,你换个文本显示那是完全可能不是对齐的,具体看约定。

不知道你具体怎么读取的,标准cvs dataset就可以的。

花飘水流兮 | 园豆:10297 (专家六级) | 2017-07-31 22:22
0

如果是标准的csv,那就找找相关的第三方类库。否则可以根据位移来确定

会长 | 园豆:5332 (大侠五级) | 2017-08-01 09:06
0

读取每一行,然后将得到的字符串用split()方法分割空字符串,然后可以得到每一个元素

青鋒 | 园豆:5 (初学一级) | 2017-08-01 16:19
0

应该只有基建燃油这一列可能为空吧  split  然后判断count  少一个 就是0

zhxiao | 园豆:23 (初学一级) | 2017-08-02 11:32
0

var newtxt = Regex.Matches(txt2, @"^(\S+)\s+(\S+(?:\s\S+)?)\s+(\S+)\s{6}(.*?)\s+(\S+)\s{4}(.*?)\s+(\d+)", RegexOptions.Multiline);

笔池 | 园豆:55 (初学一级) | 2017-08-02 17:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册