Vb.net 删除文本文件内容中的双引号
我使用的是一个遗留应用程序,其中所有源代码都在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
“
。例如,将“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()
,应该有一个限定条件。例如,如果我有一个程序,它需要一个漫长的过程来创建一个文件,如果它不存在,我想知道该文件是否存在。你完全确定“注释”部分永远不会有双引号吗?双引号的工作方式是,它们在值内加倍以表示单个双引号,例如,文件值=“颜色为“良好”。
给出的文本值为