2 mangguo0824 mangguo0824 于 2016.02.05 23:06 提问

vc逐行读取文本行并进行比较?

文本文件中的一行与其他行的内容有的完全相同,有的不同,如相同就当做是一个内容再输出,如不同,也作为一个输出。例如:

111.222.333.444.555
111.222.333.444.555
111.222.333.444.555
111.222.333.444.555
222.333.444.555.666
111.333.444.555.666

逐行读取并比较后,实际需要输出的结果是
111.222.333.444.555
222.333.444.555.666
111.333.444.555.666
VC写的代码,现在逐行读取已经实现,用CFile 当做字符串读取的,while循环。但是对于怎么比较每一行,还没有好的思路,求教大侠了。。

4个回答

caozhy
caozhy   Ds   Rxr 2016.02.05 23:09

这种问题,最好贴出你现有的代码,这样直接帮你改好了,你直接就能用。

比如说你用的是cstring string还是char数组。这个具体写出来代码都不同。
cstring用compare
string直接用等号
char用strcmp

mangguo0824
mangguo0824 其实本质上就是去重的问题
接近 2 年之前 回复
mangguo0824
mangguo0824 结果是以文本存储,一行一个内容,以回车换行结束,我初步的想法是以字符串读取后进行求取HASH的运算,再进行比较,思路有了但是还是不知道具体怎么做,或者有没有更好的方法?
接近 2 年之前 回复
mangguo0824
mangguo0824 就是这样的字段,可能有很多行,但是内容不同的可能就是三四种,然后通过比较挑出来写入另外一个文本中,
接近 2 年之前 回复
mangguo0824
mangguo0824 回复caozhy: 192.168.11.1,192.168.11.2,255.255.255.252,172.16.32.22,172.16.23.32,0.0.0.0 192.168.1.1,192.168.1.2,255.255.255.252,172.16.22.12,172.16.23.12,0.0.0.0 192.168.11.1,192.168.11.2,255.255.255.252,172.16.32.22,172.16.23.32,0.0.0.0 192.168.1.1,192.168.1.2,255.255.255.252,172.16.22.12,172.16.23.12,0.0.0.0
接近 2 年之前 回复
mangguo0824
mangguo0824 回复caozhy: 192.168.1.1,192.168.1.2,255.255.255.252,172.16.22.12,172.16.23.12,0.0.0.0 192.168.11.1,192.168.11.2,255.255.255.252,172.16.32.22,172.16.23.32,0.0.0.0 192.168.12.1,192.168.12.2,255.255.255.252,172.16.42.22,172.16.23.42,0.0.0.0 192.168.1.1,192.168.1.2,255.255.255.252,172.16.22.12,172.16.23.12,0.0.0.0
接近 2 年之前 回复
caozhy
caozhy 回复mangguo0824: 最好再给出1.txt的内容(如果比较长,可以贴出一段),并且说明你要怎么做。期待什么样的结果。
接近 2 年之前 回复
mangguo0824
mangguo0824 CFile file; file.Open("D:\1.TXT",CFile::modeReadWrite|CFile::modeCreat); CString strline; while(file.ReadString(strline)) { //读取每一行并相互比较 } file.write();
接近 2 年之前 回复
mangguo0824
mangguo0824   2016.02.06 19:06

CFile file;
file.Open("D:\1.TXT",CFile::modeReadWrite|CFile::modeCreat);
CString strline;
while(file.ReadString(strline))
{

//读取每一行并相互比较

}
file.write();

91program
91program   Ds   Rxr 2016.02.06 09:28

建议你先确认读文件中每一行的内容是否正确,通过 DEBUG 模式或者 TRACE 输出都可以。
如果通过 DEBUG 或者 TRACE 看到第一行的内容都正确后,再实现比较的过程:记录上一行的内容,在读取当前行的内容后,与上一行做字符串比较。
如果相同,则不处理;如果不相同,则处理、并修改记录上一行内容的变量的值。

91program
91program   Ds   Rxr 2016.02.06 09:27

建议你先确认读文件中每一行的内容是否正确,通过 DEBUG 模式或者 TRACE 输出都可以。
如果通过 DEBUG 或者 TRACE 看到第一行的内容都正确后,再实现比较的过程:记录上一行的内容,在读取当前行的内容后,与上一行做字符串比较。
如果相同,则不处理;如果不相同,则处理、并修改记录上一行内容的变量的值。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!