QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: haulm

有能力补充修正的请进,这几天脑子乱的。。。。

[复制链接]
发表于 2011-2-12 19:02:51 | 显示全部楼层
先对目标字符串进行预处理,去掉多余空白
从左往右扫描待分析字符串

如果第一字符是引号

就把随后的字符都入栈

直到碰到另外一个引号

碰到引号后 判断随后的字符是不是逗号
如果是

则把栈中的字符拷贝到一个字符数组,清空栈

将待分析字符串中碰到的那个逗号和逗号前面的字符都舍弃
作为新的待分析字符串,递归调用本程序进行处理

如果引号后面不是逗号就抛出一个错误退出
(这里可以试一试,如果引号后面不是逗号就继续入栈,直到碰到下一个引号)


如果待处理的字符串第一字符不是是引号

就把包括第一个字符的字符都入栈,直到碰到逗号

将栈中的字符都拷贝给一个字符数组,清空栈

将待分析字符串中碰到的那个逗号和逗号前面的字符都舍弃
作为新的待分析字符串,递归调用本程序进行处理

[ 本帖最后由 lanzinc 于 2011-2-13 09:00 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2011-2-12 21:19:44 | 显示全部楼层
我的分析器思路上没什么问题,的确比较难懂,而且有思路还要不停地调整,事实上我首帖的程序已经很接近了,但还差引号和分割相互交替可能出现未知的错误而挂掉,正常的excel 导出的文件一般不会。。。,还要花几天调试找出问题所以,问题在于考虑不全的地方会产生未知段错误,我来解释以下我的程序:

从左往右扫描待分析字符串

如果第一字符是引号 增加标志位  inita=true

如果当前字符是引号且 标志位==true ,确保当前不是最后一个字符,检查后面的字符是否为分割符,如果是则把文本 current 导入字段列表 curList,只要有导入curList,清空 current 文本并将标志位重置为false。如果不是分割符,那么说明当前引号属于包含内容,current 文本加入这个引号---循环继续。

如果当前字符不是引号,如果是分割,号,检查前面一个字符是否是引号,如果是,确保current  不为空,如果这空那么分割不成立,如果成立存入列表清空 current 文本,标志位清回 false。否则,假如当前是分割符,而标志位为 false,并且 current 文本不为空,说明cvs文本中遇到不用引号单纯用分割符号的表格,那么直接增加列表。如果标志位是 true 而当前遇到了分割符,说明不是分割作用,则current 增加文本。 如果当前不是引号又不是分割符号,则 current 增加文本。

修正:如果当前字符是最接近最后一个字符的那一个,检查最后一个是否是引号,如果是增加列表清空 current 和标志; 如果当前字符是最后一个并且不是引号,增加列表清空标志和 current 。

[ 本帖最后由 haulm 于 2011-2-12 21:21 编辑 ]
回复

使用道具 举报

发表于 2011-2-13 08:34:51 | 显示全部楼层
分割符“ ,” 和分界符“ " ”交替的情况,有很多就是csv文件非法造成的,(不过CSV文件好像没有太具体的标准)


" aaaa, aaaaa",
你要如何解释
解释成
"aaaa和aaaaa" 两个字段
还是
aaaa,aaaaa 一个字段


程序给出错误提示就可以了。错误的东西不应该纵容的。
生成csv文件的时候,就应该先对用作格式符号的字符进行转义处理的

如果非要处理,先对目标字符串进行预处理,除掉多余空白,将合法的,非分割符 的“,” 和非分界符的“ "  ”转义成保留的特殊字符;
处理完了再转义回来就可以了

预处理采用多次扫描
每次扫描仅处理一种明确的情况就好了
预处理没考虑到的情况就当作非法csv文件
这样程序比较好写

[ 本帖最后由 lanzinc 于 2011-2-13 09:27 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2011-2-13 12:40:21 | 显示全部楼层
原帖由 lanzinc 于 2011-2-13 08:34 发表
分割符“ ,” 和分界符“ " ”交替的情况,有很多就是csv文件非法造成的,(不过CSV文件好像没有太具体的标准)


" aaaa, aaaaa",
你要如何解释
解释成
"aaaa和aaaaa" 两个字段
还是
aaaa,aaaaa 一个字段


程序给出错误 ...

基于原来的代码稍做修正,最后的结果如图,如果在一个表格内也有"XXX","XXX",会被当独做为一个表格处理。
暂时不改了,我反倒觉得我这样的分割比 excel 要精准多了。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-5-21 20:35 , Processed in 0.059750 second(s), 13 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表