许多地学信息数据通常是由采集工具自动生成的文本文档来保存,相邻数据间常以空格、逗号或制表符等隔开(如下图),通常一个文本文档保存的数据能达到好几MB,手工录入到数据处理软件或数据库中几乎是不可能的,可以采用这样一种思路来处理这种数据:将每行的数据读入并保存到字符串中,然后每行再按分隔符分割成若干数据分别保存在数组中,进而输出成其它类型的文档或保存到数据库中就方便多了。
最近在学习MFC,所以只介绍一下VC++中实现这种字符串分割的方法。其实只需要编写一个类似于php中的explode的函数即可,将需要处理的字符串、分隔符传入到函数中,然后将分割开的各项保存到一个字符串数组中即可。
如何从文本文档中读取数据不是本文主题,你可以自行搜索一下。分割字符串的函数可以这样写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | void SplitStr(CString input, CStringArray &output, char division) //输入字符串为input,字符串数组output保存分割后结果,division为分割符 { output.RemoveAll(); //清空数组 for(int i=0;i<input.GetLength();i++) { if(input.GetAt(i)== division) { output.Add(input.Left(i)); //去掉右边 for(int j=0;j<(output.GetSize()-1);j++) { output[output.GetSize()-1] = output[output.GetSize()-1].Right(output[output.GetSize()-1].GetLength()-output[j].GetLength()-1); //去掉左边 } } } } |
灵活利用CString封装的一些方法可以让你省时省力,从这个函数中就可以很好的体现出来。使用该函数对字符串分割后可以用output.GetAt(i)的方式获得分割后的子串。
本文开始时的文本数据经过处理后显示在程序中是这样的:
基本上就这样了,Pavel还在努力学习MFC中,此文旨在和新手们分享一下学习所得,老鸟们还请多多指教~~
终于找到个玩C++、玩MFC的了