none
求救一个关于排重的问题 RRS feed

  • 问题

  • 我写了一个windows窗体程序,可以通过这个程序在指定的某个文件夹下创建*.txt(*代表任何名称的txt文件.例如 test.txt)

    在这些txt文件夹中写入文本.比如 网址,名称等

    txt中的书写格式

    www.baidu.com 名称百度
    www.sina.com.cn 名称新浪

    但是如果输入时间长了,有可能会产生重复内容,请问我该用什么方式进行写入前的排重功能.  

    2010年6月10日 7:23

答案

  • 一个办法是可以在先把所有信息强类型化,然后自定义 Serialize 写入 TXT 文件。这样就可以通过 C# 的多种方法,如 Linq to Object,或者 List 来检查重复了。

    比如要添加一堆 URL,可以把这些 URL 变成名称-值对,放到 Dictionary 里面,Dictionary 会自动检查重复的键,如果存在了,再次插入就会抛异常。然后,用 foreach 把所有名称-值存进 TXT 即可。


    Mark Zhou
    2010年6月10日 9:51
  • 你好!

         如果你必须使用txt文件的话,没有什么太好的办法了,只能把文件内容读取出来,然后用正则表达式匹配,如果匹配成功就证明有重复!

         txt文件的确不适合这个任务!XML更方便一些!mazhou的方法本质上也是XML序列化或二进制序列化(txt文件已经无法阅读了,我想你的需求并不希望如此)


    周雪峰
    2010年6月10日 11:01
    版主

全部回复

  • 你好

    你是想避免重复吧?   那不建议是用TXT,因为通过TXT的话,你只能通过寻求更高效的算法去查询是否已包含条目。

    可以用数据表等文件保存。

    2010年6月10日 7:34
  • 你好

         谢谢首先,txt就没有什么办法了吗。我知道xml可以。但是,如果创建成xml的格式还是需要我在导成txt文件。好麻烦感觉

    2010年6月10日 7:44
  • 一个办法是可以在先把所有信息强类型化,然后自定义 Serialize 写入 TXT 文件。这样就可以通过 C# 的多种方法,如 Linq to Object,或者 List 来检查重复了。

    比如要添加一堆 URL,可以把这些 URL 变成名称-值对,放到 Dictionary 里面,Dictionary 会自动检查重复的键,如果存在了,再次插入就会抛异常。然后,用 foreach 把所有名称-值存进 TXT 即可。


    Mark Zhou
    2010年6月10日 9:51
  • 你好!

         如果你必须使用txt文件的话,没有什么太好的办法了,只能把文件内容读取出来,然后用正则表达式匹配,如果匹配成功就证明有重复!

         txt文件的确不适合这个任务!XML更方便一些!mazhou的方法本质上也是XML序列化或二进制序列化(txt文件已经无法阅读了,我想你的需求并不希望如此)


    周雪峰
    2010年6月10日 11:01
    版主