【问题标题】:Update data in txt/xml file in C#在 C# 中更新 txt/xml 文件中的数据
【发布时间】:2009-12-19 17:11:37
【问题描述】:

我有一个 txt 文件,其中包含一些如下所示的数据:

a:1(2,3) 55(33,45,67)
b:2(1,33,456) 4(123,12444)

这意味着单词“a”出现在文本 1 的位置 2 和 3 以及文本 55 的位置 33,45 和 67..

我有一些文本,我浏览了这些文本,如果我看到“a”这个词出现在文本中,那么我需要相应地更新上面的文本文件。 (关于“a”的数据当然可以大于一行)

如何更新“a”所在的行而不损坏“b”所在的行? 我在stackoverflow中看到我可以使用xml文件。如果我使用 xml 文件,我可以读取整个“a”数据,更新它然后再次写入而不损坏“b”行吗? 或者也许关于一个词的每个数据都可以在某种数据结构中,我可以以某种方式从文件中读取,更新它,然后将它写入相同的位置?

提前致谢,

格雷格

【问题讨论】:

    标签: c# xml file data-structures


    【解决方案1】:

    您可以使用

    在 XML 中编码相同的信息
    <words>
      <word name="a">
        <text id="1">
          <place id="2" />
          <place id="3" />
        </text>
        ...
      </word>
      ...
    </words>
    

    如您所见,XML 与您的文本格式存在相同的问题:更新需要重写,因此不会像您希望的那样有很大帮助。

    鉴于您问题中的样本,我假设您没有索引一个庞大的语料库。如果是,请按以下步骤执行更新:

    1. 将当前索引文件读入您​​用于索引的数据结构中。
    2. 更新您的数据结构以反映语料库中新添加文本的内容。
    3. 将整个更新索引的内容写入一个新的临时文件。
    4. 成功后,将临时文件重命名为步骤 1 中的主索引文件。

    如果你确实有一个非常大的语料库,那么基于文本的索引是不合适的。考虑使用真实的数据库。

    【讨论】:

    • +1 这正是我所描述的。您认为“非常大的语料库”是什么?数据也可以很容易地从这个结构加载到 DataSet 中并在内存中处理,然后在每次“事务”之后重新保存。我使用过 6,000 多条记录的数据集,但发现它们在大约 20,000 条记录(约 10 兆字节)时变得缓慢。在这种情况下,需要分页。这可能是对我的 LINQ to XML 答案的限制。
    【解决方案2】:

    如果将此文本文件更改为 XML,则可以使用 LINQ to XML 轻松操作该文件。

    看看here。具体来说,manipulation section

    【讨论】:

    • 据我在该链接中阅读的内容了解,您可以简单地创建一个 xml 文档,然后您可以导航到要替换其内容的 XElement,然后使用 ReplaceNodes() 方法.
    • @hellfrost,如果这是简单的字符串操作,那将无济于事。但是,Greg 想要维护一个跟踪单词位置的记录文件。如果单词很多,位置很多,手动逐行处理一个文件是很多不必要的处理。使用 XML 将允许对记录进行增量访问。 @格雷格。正确的。但是,您还可以找到一个 XML 元素(单词)并插入/更新/删除在文本中引用该单词的节点。
    【解决方案3】:

    使用:string.Insert

    但我会使用 2D 数组 int Places[text][place]。

    您的问题与 XML 无关,尽管您可以为此使用 XML,一个简单的数据结构,会更简单....

    编辑:

    好的,用这个:

     dictionary<string,dictionary<int,list<int>>>  .
    

    使用字典,键是您的单词,值是另一个带有文本编号和位置的字典... 顺便说一句,您可以将所有这些 serlize 归档....

    【讨论】:

    • 但我不知道数组的大小,因为我必须遍历文本并将单词的出现添加到文本文件中,但我不知道会有多少出现。另外,如果我将为每个单词保存一些数据结构,我如何才能准确地导航到文本文件中存在我需要更新的单词的位置?
    猜你喜欢
    • 2014-02-18
    • 2020-07-07
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多