我在处理带有回车符的字符串时遇到了一些问题。 (我需要保留回车。并且不想为它们唯一编码。)这个字符串有2个回车...
Press the Switch
Drying
当我在Visual Studio的SQL编辑器中查看它时,它看起来像....
Press the SwitchDrying
这在技术上不是问题。我可以将内容复制并粘贴到Excel或其他地方,并且格式正确。
当我尝试将字符串与另一个变量进行比较时,即使它具有相同的值,也会出现问题。
我从Sql 2008 R2数据库表中查询一组记录,然后将它们与外部数据表进行比较。
因此,我遍历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数组后,注意到第一次回车后有两个空格被添加。或者它们可能是每个之后的一个空格,因为未在char数组中标识CR。
我没有任何代码可以拆分此字符串,而且只有具有回车符的字符串才会导致此字符串。唯一的另一个区别是一个字符串是一个OLE DataAdapter,另一个是SQL DataAdapter。
是什么给出的?任何想法?
UPDATE :似乎SQL DataAdapater未正确表示从我的查询返回的数据集中的carraige返回值。当我在VS SQL编辑器中查看表内容时,可以正确地将字符串从表复制并粘贴到任何其他应用程序中。我将很快查看代码的比较。
答案 0 :(得分:2)
new line可能是CR和LF的两个字节的组合(或十六进制中的0D 0A,在C#中转义为'\ r \ n'等)。如果你的字符串来自Linux系统,它可能使用单个字节LF。
如果字符串比较不考虑嵌入的新行字符,则预计会失败。如果您希望忽略换行符以进行字符串比较,则必须执行String.Replace之类的操作来删除换行符。当然,您始终可以保留包含换行符的原始字符串的副本。
我希望这与您所看到的问题相关吗?