代码之家  ›  专栏  ›  技术社区  ›  Jack

替换文本文件中的特殊字符。最好的方法是什么?

  •  1
  • Jack  · 技术社区  · 10 年前

    我有一个带有行和特殊字符的文本文件。我想换掉那些。这是最好的方法吗?我觉得这不是最快的方法。

    Dim lOpenFile As Long
    Dim sFileText As String
    Dim sFileName As String
    
    sFileName = "C:\test.txt"
    
    
    lOpenFile = FreeFile
    Open sFileName For Input As lOpenFile
    sFileText = Input(LOF(lOpenFile), lOpenFile)
    Close lOpenFile
    
    sFileText = Replace(sFileText, " Ç ", " C ")
    sFileText = Replace(sFileText, " ü ", " u ")
    sFileText = Replace(sFileText, " é ", " e ")
    
    
    lOpenFile = FreeFile
    Open sFileName For Output As lOpenFile
    Print #lOpenFile, sFileText
    Close lOpenFile
    

    同时,我想总结一下已经改变的事情。有谁能帮我吗?

    1 回复  |  直到 10 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    我想你真正想要的是删除所有 diacretics 从一个字符串,所以重音或变音。然后您可以使用此方法,因为它使用 StringBuilder :

    Public Shared Function RemoveDiacritics(s As String) As String
        Dim normalizedString As String = s.Normalize(NormalizationForm.FormD)
        Dim stringBuilder As New StringBuilder()
    
        For Each c As Char In normalizedString
            If CharUnicodeInfo.GetUnicodeCategory(c) <> UnicodeCategory.NonSpacingMark Then
                stringBuilder.Append(c)
            End If
        Next
    
        Return stringBuilder.ToString()
    End Function
    

    [记住添加 Imports System.Text 到代码文件的顶部]

    但请注意,它将转换为 ü 到 u (根据需要)不正确。通常,你应该用以下方式“翻译”德语变音: = ue , ä = ae , ö = oe . Related

    您可以这样调用上述方法:

    Dim text As String = File.ReadAllText(sFileName)
    Dim newText As String = RemoveDiacritics(text)
    File.WriteAllText(sFileName, newText)