【问题标题】:Increase ProgressBar with each string.replacement使用每个 string.replacement 增加 ProgressBar
【发布时间】:2018-02-20 19:46:17
【问题描述】:

我有一段简单的代码可以将完整的 XML 文件转换为字符串。

     xOrgXml.Load(mOrgFile)
     fFullString = xOrgXml.OuterXml

我使用 string.replace 将字符串的某些部分替换为另一个表单的输入。之后我将它转换回一个完整的 XML 文件。这一切都很好。

    fFullString = fFullString.Replace("<XMLtag>Item</XMLtag>", "<XMLtag>" & Form2.NewItem & "</XMLtag>")
    mXMLDocSave.LoadXml(fFullString)
    mXMLDocSave.Save(pSavelocation)

因为“Item”在字符串中多次出现,所以我想在每次替换完成时用 (1) 来增加进度条,但 string.replace 方法是一次性的,即使将它包含在 For每个语句。

    fFullString = fFullString.Replace("<XMLtag>Item</XMLtag>", "<XMLtag>" & Form2.NewItem & "</XMLtag>")
    pProgressbar.Increment(1)

我尝试使用 string.split 拆分完整的字符串,但这对我不起作用,因为唯一可用于拆分的字符是“”,它们是转换时所需的 XML 标记的关键部分字符串返回一个 XML 文件

有人对如何解决这个问题有一个可靠的想法吗?

【问题讨论】:

  • 也许创建一个循环来检查您的字符串的 IndexOf 并且每次找到它时,它使用 Substring 一次只替换一个实例
  • 感谢您的评论 Chase,我还没有探索 IndexOf 选项,因为我已经找到了另一个解决方案,但也许使用 IndexOf 可能会产生更清晰的代码。也许发布示例代码作为其他面临此问题的人的次要答案。

标签: xml string vb.net replace progress-bar


【解决方案1】:

通常我发布一个问题,30 分钟后我找到了解决方案...

如果有人面临类似挑战,供将来参考:

我将我的 string.replace 语句更改为仅替换其遇到的第一个匹配项的替换语句。将其包含在 For Each 和 Do Until 循环中,进度条每次增加 (1)。

原字符串.替换:

    fFullString = fFullString.Replace("<XMLtag>Item</XMLtag>", "<XMLtag>" & Form2.NewItem & "</XMLtag>")

新字符串替换限制在 For Each 和 Do Until 循环中包含的 1 (....., , 1):

For Each Replacement As String In ReplaceCollection
    If Replacement = "<XMLtag>Item</XMLtag>" Then
          Do Until fFullString.Contains(Replacement) = False
               fFullString = Replace(fFullString, Replacement, "<XMLtag>" & Form2.NewItem & "</XMLtag>", , 1)
               pProgressbar.Increment(1)
          Loop
    End If
Next

我希望这对其他人也有帮助。

【讨论】:

  • 是的,这与我所建议的概念相似,事实上,我更喜欢您的解决方案而不是我的解决方案,因为它封装了一个实例的检查并替换为一行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多