2013-05-20 1 views
0

문자열에 캐리지 리턴을 처리하는 데 문제가 있습니다. (필자는 캐리지 리턴을 유지해야합니다. 그리고 유일하게 그들을 위해 코딩하지 싶습니다.)이 문자열 2 캐리지 리턴을 가지고 ...캐리지 리턴 문자열을 공백으로 추가하는 방법

Press the Switch 

Drying 

를 그리고 비주얼 스튜디오의 SQL 편집기에서 볼 때 보이는 것처럼 ....

Press the SwitchDrying 

기술적으로 문제가되지 않습니다. 내용을 Excel 또는 다른 곳에 복사하여 붙여 넣을 수 있으며 형식이 올바르게 지정되어 있습니다.

동일한 값을 갖고 있어도 문자열을 다른 변수와 비교하려고하면 문제가 발생합니다.

내 Sql 2008 R2 DB 테이블에서 레코드 집합을 쿼리 한 다음이를 외부 데이터 소스와 비교합니다.

그래서 문자 배열을 추가 한 후 세트 SQL 결과의 레코드를 I 루프 ....

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 

로서 든 제 1 캐리지 리턴 후에 첨가되는 2 개 공간이 있었다는 것을 알아 차렸다. 또는 CR이 char 배열에서 식별되지 않기 때문에 각각의 뒤에 하나의 공백이 올 수도 있습니다.

이 문자열을 분할하는 코드가없고이 원인이되는 캐리지 리턴이있는 문자열 만 있습니다. 유일한 다른 차이점은 한 문자열이 OLE DataAdapter이고 다른 문자열은 SQL DataAdapter입니다.

무엇을 제공합니까? 어떤 아이디어?

업데이트 : SQL DataAdapater가 내 쿼리에서 반환 된 데이터 집합의 캐러지 리턴을 올바르게 나타내지 못하는 것처럼 보입니다. VS SQL Editor에서 테이블 내용을 볼 때 문자열을 올바르게 복사하여 테이블에서 다른 응용 프로그램에 붙여 넣을 수 있습니다. 나는 값의 비교를 곧 보게 될 코드를 걷게 될 것이다.

답변

2

new line은 CR 및 LF (또는 0D 0A, 16 진수, C#의 '\ r \ n'등으로 이스케이프 처리됨)에 대해 2 바이트의 조합 일 가능성이 큽니다. 문자열이 Linux 시스템에서 나왔다면 단일 바이트 LF를 사용하는 것 같습니다.

문자열 비교는 삽입 된 줄 바꿈 문자를 고려하지 않으면 실패 할 것으로 예상됩니다. 문자열 비교를 위해 개행을 무시하려면 개행 문자를 제거하기 위해 String.Replace과 같은 것을해야합니다. 물론 개행 문자가 포함 된 원본 문자열의 사본을 항상 보관할 수 있습니다.

이것은보고 계시는 문제와 관련이 있습니까?

+0

문자열이 다른 Access 데이터베이스에서 나옵니다. Linux가 없습니다. 답장을 보내 주셔서 감사 드리며,이 문제에 대한 의견을 보내 주시면 감사하겠습니다. – htm11h

+1

@ marc11h "행이 캐리지 리턴 후 2 칸을 추가하고있다"고 말할 때, 정말로 그 칸들이 공백입니까? 때때로 0x0A 또는 0x0D와 같은 인쇄 할 수없는 문자는 공백 (물음표 또는 "상자"등)으로 렌더링됩니다. 한 문자열에 이들 문자열이 있고 다른 문자열에없는 경우 두 문자열이 일치하지 않습니다. 맞습니까? – criticalfix

+0

글자는 배열의 추가 문자 공간입니다. 0x00d 0xOa 문자열을 추가 2 공백을 추가하는 Windows 0x0 경우에만있는 것 같아요. 내일 좀 더 시험을 봐야 겠어. 필자는 Lotus Nnotes 시스템과 아마도 문자열 관리를 혼합 한 Unix가 있었음을 확인했습니다. – htm11h