弯路
来源:互联网 发布:python语音识别 编辑:程序博客网 时间:2024/04/28 21:17
今天,在处理一大段数据的时候,走了不少的弯路
数据格式是类似这样:
2007ag 20***ag 이윤미 xxym2***g.co.kr 222630 nr***an 한누리 leek***lyasiana.com aacm 152***57 이기훈 leek***lyasiana.com agmaster agm***ster 안그라픽스 leek***flyasiana.com agtest ag***est 테스트아이디 tes***test.net ahn2011 dksr***fkvlrtm ahn sloh@ag.co.kr
我要做的是把每行的4列数据都提取出来。
因为之前我处理的大段数据,分隔符都是比较统一的逗号或者是其他比如破折号之类的
所以,我一般采用对逐个关键字(比如逗号)的定位,把坐标写入列表,最后,统一提取列表的第XX个的位置就好了
以下是代码块:
//分隔符string SpitStrFst = " ";string SpitStrOthers = " ";List<int> Pos = new List<int>();Pos.Add(Str.IndexOf(SpitStrFst, 0));for (int i = 0; i < Str.Length; ){ int Find = Str.IndexOf(SpitStrOthers, i); if (Find == -1) break; Pos.Add(Find); i = Find + 1;}
但是今天的问题就出现在这,两个数据之间的空格数量是不定的(数据源是从Excel之间复制来的)所以总是不能很好的对数据定位
比如,得到的Pos列表是这样的结果:
很明显,我要做的是,把这些连续的排列,做个清理,只保留一个就够(比如8,9,10,11,12,13,14,15,16,17只保留8)
开始,我这样写,思路是,如果下一个定位和与上一个只差1,说明是连续的,则舍弃:
//分隔符string SpitStrFst = " ";string SpitStrOthers = " ";List<int> Pos = new List<int>();Pos.Add(Str.IndexOf(SpitStrFst, 0));for (int i = 0; i < Str.Length; ){ int Find = Str.IndexOf(SpitStrOthers, i); try { if (Find == -1) break; if (Pos.Count > 0) { if (Find == Pos[Pos.Count - 1] + 1) { throw new Exception("Continue2Next"); } } Pos.Add(Find); if (Find == Str.Length) break; } catch { } finally { i = Find + 1; }}我也是后来,才发现这是个逻辑问题,因为,代码的确是像我说的一样舍弃了,但是Pos变成这样了:0,0,2,4,6,8.....
我发觉,单单提取下一位也不行,需要检测,如果这已经是下一位了,需要检测前两位是否是连续的……慢慢,思路开始复杂起来。
这时候,脑海中一个声音跳出来,这个问题真的这么复杂么!?
我打断了继续复杂化的思路,开始重新审视整个数据,我发现,问题的确是出在空格的长度上,如果……
如果,我把多个空格合并成一个,那样的话,不就和之前的一样能处理了么,于是,我写了这样的函数,用来把多个空格合并成一个:
public static string MultiSpacesToOne(string InputStr){ List<int> Pos = new List<int>(); for (int i = 0; i < InputStr.Length; i++) { if (InputStr[i] == ' ') Pos.Add(i); } for (int i = Pos.Count - 1; i > 0; i--) { int Tail = Pos[i]; int BeforTail = Pos[i - 1]; if (BeforTail == Tail - 1) { InputStr = InputStr.Remove(Tail, 1); } } return InputStr;}
然后,显然,问题很快解决。而代码,除了这个新加入的函数,要做改变的,仅仅是加了这一句话:
Str = MultiSpacesToOne(Str);
我在想,假如,我们遇到问题时,如果是从问题的源头开始思考解决办法,而不是先从修复的角度,是不是会更好的解决很多问题呢。
一直都是,我们会觉得推翻现有的,重新设计一个东西,一定要复杂的多,其实,我们错了,错在惯性思维上,maybe,站在全局的角度重新思考才是捷径!
- 弯路
- 弯路
- 弯路
- 少走六年弯路
- 少走六年弯路
- 编程走过的弯路
- 我走的弯路
- 教你少走点弯路
- 非走不可的弯路
- 我所走过的弯路
- 完全对象化的弯路
- 非走不可的弯路[张爱玲]
- 非走不可的弯路 [转]
- 早接触Debian,会少走很多弯路
- DBA必看,少走很多弯路
- 他们的弯路 我们的桥梁
- Android APP开发的弯路教训
- 我在ESB上走的弯路
- BitMap 设置图片大小
- web.xml文件中<context-param>元素的作用
- C#编写dll库文件并注册为COM组件供其他语言(如PHP等)调用
- Linux中动态和静态ip配置
- web.xml文件中的Listener元素的作用
- 弯路
- linux memory lock浅析
- 如何使用python去除验证码里的连贯线
- 创造美,创造价值
- 如何在Asp.net窗体中使用验证码生成
- Csharp解决验证码中的干扰点干线
- linux IPv4报文处理浅析
- 用c#来区别验证码图片的前背景
- 利用spring AOP注解实现日志管理