-1

我想替换文本

参考编号 :

变得

参考号:xyz1234

我的编码如下:

Dim oReader As New StreamReader(Frm1.lblFileName.Text)
Dim sLine As String = Nothing
While Not oReader.EndOfStream
    sLine = oReader.ReadLine()
    If (Not String.IsNullOrEmpty(sLine)) Then
        If sLine.Contains("Ref No") Then
            sLine.Replace("Ref No", "xyz1234")
        End If
    Else
    End If
End While
oReader.Close()

它不会将 Ref No: 替换为 Ref No:xyz1234。

4

3 回答 3

3

从表面上看你的代码,你似乎错过了一些东西。最明显的是 Replace() 方法的输出必须分配给另一个字符串。

所以,你的行:

sLine.Replace("Ref No", "xyz1234")

变成:

sLine = sLine.Replace("Ref No", "xyz1234")

此外,正如@Curt 指出的那样,根据您的描述,您的实际替换将是:

sLine = sLine.Replace("Ref No :", "Ref No : xyz1234")

我也看不到您如何保留在 sLine 中所做的更改,但我会假设这是因为您已经简化了示例。不用说,您需要在每次循环迭代后将 sLine 的值存储在某处。例如链接这个:

Dim sLine As String
Dim sText As New Stringbuilder
Dim oReader As New StreamReader(Frm1.lblFileName.Text)
While Not oReader.EndOfStream
  sLine = oReader.ReadLine()
  If Not String.IsNullOrEmpty(sLine) AndAlso sLine.Contains("Ref No :") Then
    sLine = sLine.Replace("Ref No :", "Ref No : xyz1234")
  End If
  sText.AppendLine(sLine)
End While
oReader.Close()
Frm1.lblFileName.Text = sText.ToString()
于 2013-07-08T05:52:27.670 回答
2

两件事情:

改变:

   If sLine.Contains("Ref No") Then
      sLine.Replace("Ref No", "xyz1234")

   If sLine.Contains("Ref No") Then
      sLine.Replace("Ref No", "Ref No: xyz1234")

你的逻辑是对的,但是一旦你修改了字符串,你就不会对它做任何事情。Replace() 不会就地修改字符串,而是返回一个新字符串,字符串替换生效。由于您没有将它分配给任何东西或打印它,它只是被扔掉了。你可能想做类似的事情

 StringBuilder sb = new StringBuilder();

.. 接着

   If sLine.Contains("Ref No") Then
      sb.Append(sLine.Replace("Ref No", "xyz1234"))
   else sb.Append(sline)

但是将整个文件读入字符串会更容易,然后对其进行一次替换。

于 2013-07-08T05:40:37.253 回答
0

我现在不做任何假设,但是您的代码没有显示您阅读 DOCX 文件的方式和内容。假设它是 DOCX 文件 :) 如果是 DOCX 文件,但您没有 DOCX 阅读器,请查看“Open XML Format SDK”。接下来的事情是,您必须将值放回保存字符串的变量中,并且您还没有这样做,并且您没有将结果保存回 DOCX 文件。

sLine = sLine.Replace("Ref No", "Ref No:xyz1234") 您只是在阅读文件后关闭阅读器并对包含文件名中读取文本的字符串进行替换,这是在似乎是原始文本方式,或者您可能没有向我们展示整个代码。

干杯,米克

于 2013-08-05T14:18:51.323 回答