【问题标题】:Remove CRLF from string C#从字符串 C# 中删除 CRLF
【发布时间】:2017-11-23 18:21:26
【问题描述】:

我正在尝试将这个从字符串中删除 CRLF 的 VBA 函数转换为必须执行相同结果的 C# 函数

Private Function RemoveCRLFFromString(ByVal pString As Variant) As String
Dim i As Integer
Dim c As String * 1

 If IsNull(pString) Then
    RemoveCRLFFromString = ""
 Else
    For i = 1 To Len(pString)
        c = Mid$(pString, i, 1)
        If Asc(c) <> 10 And _
           Asc(c) <> 13 Then
           RemoveCRLFFromString = RemoveCRLFFromString & c
        End If
    Next i
 End If


 RemoveCRLFFromString = Left$(RemoveCRLFFromString, 9)

End Function

到目前为止,我想出了:

public static string RemoveCRLFFromString(string pString )
{
    if(String.IsNullOrEmpty(pString))
    {
        return pString ;
    }
    string lineSep = ((char) 0x2028).ToString();
    string paragraphSep = ((char)0x2029).ToString();

    return pString.Replace("\r\n", string.Empty).Replace("\n", string.Empty).Replace("\r", string.Empty).Replace(lineSep, string.Empty).Replace(paragraphSep, string.Empty);
}

但它没有达到相同的结果,有人可以帮我调整我的 C# 函数以匹配与 VBA 版本相同的结果吗?

【问题讨论】:

  • 确切的替换是:return string.Replace("\n","").Replace("\r","").Substring(0, 9);
  • @Gusman Hey Gusman 我一直很感谢你的帮助,所以如果我不明白我应该替换:return pString.Replace("\r\n", string.Empty).Replace("\n", string.Empty).Replace("\r", string.Empty).Replace(lineSep, string.Empty).Replace(paragraphSep, string.Empty); 并替换为:return string.Replace("\n","").Replace("\r","").Substring(0, 9);
  • 是的,你也可以删除字符串。
  • 等一下,null 结果也不一样,让我添加这个作为答案。
  • @Gusman 谢谢你,花点时间。非常感谢您的帮助

标签: c# string vba


【解决方案1】:

您缺少空检查(在这种情况下,原始函数返回一个空字符串)并且您忘记了修剪字符串大小的Left$

public static string RemoveCRLFFromString(string pString)
{
    //Return empty string if null passed
    if(pString == null)
        return ""; 

    //Remove carriage returns
    var str = pString.Replace("\n","").Replace("\r",""); 

    //If len is more than 9 chars trim it
    return str.Length > 9 ? str.Substring(0, 9) : str;
}

【讨论】:

    【解决方案2】:

    VBA 函数过于复杂。可以简化为:

    Private Function RemoveCRLFFromString(ByVal pString As Variant) As String
        Dim s As String
    
        s = Nz(pString)  ' Available in Access VBA, in Excel you'd need a null check
        s = Replace(s, vbCr, "")
        s = Replace(s, vbLf, "")
    
        RemoveCRLFFromString = Left(s, 9)
    End Function
    

    一旦无用的复杂性消失,C# 的翻译就很简单,留给读者作为练习。注意:

    • Nz(...) 变为 ... ?? ""
    • Replace(...) 变为 ....Replace(...)
    • Left 变为 Truncate,这不是内置方法,但可以通过长度检查轻松实现。

    哦,既然你的方法比删除 CR 和 LF (它还会截断字符串)更多,它的名称应该更改。

    【讨论】:

    • 您好 Heinzi,是的,这当然很复杂,我正在开发一个 1998 年构建的访问应用程序,并尝试在 c# 2017 应用程序中编写它:) .....谢谢优化 vba 代码的时间
    • @napi15:谢谢。好吧,谈论“应该更新的旧代码”...... ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多