Vb.net 删除文本文件内容中的双引号

Vb.net 删除文本文件内容中的双引号,vb.net,Vb.net,我使用的是一个遗留应用程序,其中所有源代码都在vb.net中。我正在检查文件是否存在以及条件是否为真,请替换文件内容中的所有“。例如,将“text”替换为text。我使用以下代码 vb.net Dim FileFullPath As String FileFullPath = "\\Fileshare\text\sample.txt" If File.Exists(FileFullPath) Then Dim stripquote As String = FileF

我使用的是一个遗留应用程序,其中所有源代码都在vb.net中。我正在检查文件是否存在以及条件是否为真,请替换文件内容中的所有
。例如,将
“text”
替换为
text
。我使用以下代码

vb.net

Dim FileFullPath As String
FileFullPath = "\\Fileshare\text\sample.txt"

If File.Exists(FileFullPath) Then
    Dim stripquote As String = FileFullPath
    stripquote = stripquote.Replace("""", "").Trim()
Else
    '
End If
    
我没有收到任何错误,同时文件内容中没有替换

数据:

ID, Date, Phone, Comments
1,05/13/2021,"123-000-1234","text1"
2,05/13/2021,"123-000-2345","text2"
3,05/13/2021,"123-000-3456","text2"
1,05/13/2021,123-000-1234,text1
2,05/13/2021,123-000-2345,text2
3,05/13/2021,123-000-3456,text2
输出:

ID, Date, Phone, Comments
1,05/13/2021,"123-000-1234","text1"
2,05/13/2021,"123-000-2345","text2"
3,05/13/2021,"123-000-3456","text2"
1,05/13/2021,123-000-1234,text1
2,05/13/2021,123-000-2345,text2
3,05/13/2021,123-000-3456,text2

TextFieldParser可能是一个不错的选择

只需对代码进行一些更改

    Static doubleQ As String = New String(ControlChars.Quote, 2)

    Dim FileFullPath As String
    FileFullPath = "\\Fileshare\text\sample.txt"

    If IO.File.Exists(FileFullPath) Then
        Dim stripquote As String = IO.File.ReadAllText(FileFullPath)
        stripquote = stripquote.Replace(doubleQ, "").Trim()
    Else
        '
    End If

注意静态声明。我采用这种方法是因为它把我搞糊涂了。

TextFieldParser可能是一种方法

只需对代码进行一些更改

    Static doubleQ As String = New String(ControlChars.Quote, 2)

    Dim FileFullPath As String
    FileFullPath = "\\Fileshare\text\sample.txt"

    If IO.File.Exists(FileFullPath) Then
        Dim stripquote As String = IO.File.ReadAllText(FileFullPath)
        stripquote = stripquote.Replace(doubleQ, "").Trim()
    Else
        '
    End If

注意静态声明。我采用这种方法是因为它把我搞糊涂了。

您可以读取文件的每一行,删除双引号,将其写入临时文件,然后在所有行完成后删除原始文件,并将临时文件移动/重命名为文件名:

Imports System.IO
'...
Sub RemoveDoubleQuotes(filename As String)
    Dim tmpFilename = Path.GetTempFileName()
    Using sr As New StreamReader(filename)
        Using sw As New StreamWriter(tmpFilename)
            While Not sr.EndOfStream
                sw.WriteLine(sr.ReadLine().Replace("""", ""))
            End While
        End Using
    End Using

    File.Delete(filename)
    File.Move(tmpFilename, filename)

End Sub

根据需要添加错误处理。

您可以读取文件的每一行,删除双引号,将其写入临时文件,然后在所有行完成后删除原始文件并将临时文件移动/重命名为文件名:

Imports System.IO
'...
Sub RemoveDoubleQuotes(filename As String)
    Dim tmpFilename = Path.GetTempFileName()
    Using sr As New StreamReader(filename)
        Using sw As New StreamWriter(tmpFilename)
            While Not sr.EndOfStream
                sw.WriteLine(sr.ReadLine().Replace("""", ""))
            End While
        End Using
    End Using

    File.Delete(filename)
    File.Move(tmpFilename, filename)

End Sub

根据需要添加错误处理。

执行此操作的最佳方法取决于文件的潜在大小。如果文件相对较小,则没有必要逐行处理它,当然也没有使用
TextFieldParser
。只需将数据读入、处理并写出:

File.WriteAllText(FileFullPath,
ReadAllText(FileFullPath)。
替换(ControlChars.Quote,String.Empty))
<>只有文件是大的,并且一次读取它都需要太多内存,如果你考虑逐行处理它。在这种情况下,我会这样做:

'让系统创建一个临时文件。
Dim tempFilePath=Path.GetTempFileName()
'打开临时文件以写入文本。
将tempFile用作新的StreamWriter(tempFilePath)
'打开源文件并逐行读取。
对于File.ReadLines(FileFullPath)中的每一行
'从当前行中删除双引号,并将结果写入临时文件。
tempFile.WriteLine(line.Replace(ControlChars.Quote,String.Empty))
下一个
终端使用
'用临时文件覆盖源文件。
File.Move(tempFilePath、FileFullPath、True)
注意使用
File.ReadLines
而不是
File.ReadAllLines
。前者一次只读取一行,后者在处理任何一行之前读取每一行

编辑:

请注意:

File.Move(tempFilePath、FileFullPath、True)
仅适用于.NET Core 3.0及更高版本,包括.NET 5.0。如果您的目标是.NET Framework,则有三个其他选项:

  • 删除原始文件(
    file.Delete
    ),然后移动临时文件(
    file.move
  • 复制临时文件(
    file.Copy
    ),然后删除临时文件(
    file.delete
  • 调用
    My.Computer.FileSystem.MoveFile
    移动临时文件并一次性覆盖原始文件

  • 最好的方法取决于文件的潜在大小。如果文件相对较小,则没有必要逐行处理它,当然也没有使用
    TextFieldParser
    。只需将数据读入、处理并写出:

    File.WriteAllText(FileFullPath,
    ReadAllText(FileFullPath)。
    替换(ControlChars.Quote,String.Empty))
    
    <>只有文件是大的,并且一次读取它都需要太多内存,如果你考虑逐行处理它。在这种情况下,我会这样做:

    '让系统创建一个临时文件。
    Dim tempFilePath=Path.GetTempFileName()
    '打开临时文件以写入文本。
    将tempFile用作新的StreamWriter(tempFilePath)
    '打开源文件并逐行读取。
    对于File.ReadLines(FileFullPath)中的每一行
    '从当前行中删除双引号,并将结果写入临时文件。
    tempFile.WriteLine(line.Replace(ControlChars.Quote,String.Empty))
    下一个
    终端使用
    '用临时文件覆盖源文件。
    File.Move(tempFilePath、FileFullPath、True)
    
    注意使用
    File.ReadLines
    而不是
    File.ReadAllLines
    。前者一次只读取一行,后者在处理任何一行之前读取每一行

    编辑:

    请注意:

    File.Move(tempFilePath、FileFullPath、True)
    
    仅适用于.NET Core 3.0及更高版本,包括.NET 5.0。如果您的目标是.NET Framework,则有三个其他选项:

  • 删除原始文件(
    file.Delete
    ),然后移动临时文件(
    file.move
  • 复制临时文件(
    file.Copy
    ),然后删除临时文件(
    file.delete
  • 调用
    My.Computer.FileSystem.MoveFile
    移动临时文件并一次性覆盖原始文件

  • 不要。使用<代码>文件.Exists()!另外,请查看
    TextFieldParser
    类,它可以为您处理这类事情。@JoelCoehoorn说不要使用
    File.Exists()
    ,应该有一个限定条件。例如,如果我有一个程序,它需要一个漫长的过程来创建一个文件,如果它不存在,我想知道该文件是否存在。你完全确定“注释”部分永远不会有双引号吗?双引号的工作方式是,它们在值内加倍以表示单个双引号,例如,文件值=
    “颜色为“良好”。
    给出的文本值为