0

我在处理带有回车的字符串时遇到了一些问题。(我需要保留回车符。并且不想为它们唯一编码。)这个字符串有2个回车符......

Press the Switch

Drying

当我在 Visual Studio 的 SQL 编辑器中查看它时,它看起来像......

Press the SwitchDrying

这在技术上不是问题。我可以将内容复制并粘贴到 Excel 或其他地方,并且格式正确。

当我尝试将字符串与另一个变量进行比较时,问题就出现了,即使它具有相同的值。

我从我的 Sql 2008 R2 DB 表中查询一组记录,然后将它们与外部数据源进行比较。

所以当我遍历 SQL 结果集的记录时......

For Each row As DataRow In myTable.Rows

    Dim stringVal As String = row(columnName).ToString()

    ' Eventually added this to see that the row was adding 2 spaces after the carriage return
    Dim cstringVal() As Char = stringVal.ToCharArray
    Dim csearchValue() As Char = searchValue.ToCharArray

    ' Originally tried
    If row(columnName) = searchValue And row(columnName2) = searchValue2 Then
        return True
    End If

    ' Tried this
    If stringVal = searchValue And row(columnName2) = searchValue2 Then
        Return True
    End If

    ' And this
    If String.Compare(stringVal, searchValue, False) = 0 And row(columnName2) = searchValue2 Then
        Return True
    End If
 Next
 Return False

添加 char 数组后,注意到在第一个回车后以某种方式添加了 2 个空格。或者可能是它们每个之后的一个空格,因为 CR 没有在 char 数组中标识。

我没有任何代码可以分割这个字符串,只有带有回车的字符串才会导致这种情况。唯一的其他区别是一个字符串是 OLE DataAdapter,而另一个是 SQL DataAdapter。

是什么赋予了?有任何想法吗?

更新:SQL DataAdapater 似乎没有正确表示从我的查询返回的数据集中返回的 carraige。当我在 VS SQL 编辑器中查看表内容时,可以正确地将字符串从表中复制并粘贴到任何其他应用程序中。我将很快浏览代码,查看值的比较。

4

1 回答 1

2

可能是 CR 和 LF 的两个字节的组合(或十六进制的 0D 0A,在 C# 中转义为 '\r\n' 等)。如果您的字符串来自 Linux 系统,它可能使用单字节 LF。

如果不考虑嵌入的换行符,则字符串比较预计会失败。如果您想忽略换行符以进行字符串比较,则必须执行String.Replace之类的操作来删除换行符。当然,您始终可以保留包含换行符的原始字符串的副本。

我希望这与您看到的问题有关?

于 2013-05-20T18:41:33.783 回答