2009-06-16 7 views
-1

다음 코드를 사용하여 문자열을 별도의 줄로 분할하려하지만 어떤 이유로 문자열의 공백도 제거하고 있습니다..split은 문자열의 탭/공백을 제거합니까?

Dim calculationText As String 
calculationText = File.ReadAllText(fileName) 

Dim fields() As String 
fields = calculationText.Split(vbCrLf) 

디버거 모드에있을 때 필드를보고 모든 요소에 문자열 줄이 있지만 모든 공백과 탭이 제거됩니다.

이유가 무엇인가요?

답변

2

:-) 당신은 결코 알지 :

Sub Main() 
    Dim fields As New List(Of String) 

    ' read file into list 
    Using sr As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(filename) 
     Try 
      Do While sr.Peek() >= 0 
       fields.Add(sr.ReadLine()) 
      Loop 
     Finally 
      If sr IsNot Nothing Then sr.Close() 
     End Try 
    End Using 

    ' check results 
    For Each line As String In fields 
     Console.WriteLine(line) 
    Next 
End Sub 
+0

Doh ..이 솔루션을 동시에 게시했습니다. :-) 나는 실제로 코드 샘플을 가지고 있기 때문에 내 것을 제거 할 것이다. –

+0

음 ... 한 줄짜리로 할 수 있어요 –

0

나는 그것을 본 적이 한번도 본 적이 없으며, String.Split을 광범위하게 사용했습니다. 그들은 실제로 사라 졌는가, 아니면 디버거의 속임수입니까?

실제로 매개 변수로 하나의 문자열을 사용하는 .Split 메서드가 없으므로 VB 컴파일러는 장면 뒤에서 다른 오버로드를 선택하는 "things"를 수행합니다. 올바른 과부하를 시도하려면 calculationText.Split(vbCrLf.ToCharArray())을 시도하십시오. 당신이 사용할 수있는, 나는 그것이 도움이 될 것입니다 의심하지 않지만, 당신이 파일에서 읽는 경우

1

어떻게 '시합 : 왜에 관해서는

Dim fields() As String = File.ReadAllLines(fileName) 

string.Split()이 이상한 일을하고 있습니다 ...

vbCrLf은 문자열이며 단일 문자열 매개 변수를 허용하는 string.split에 대한 과부하가 없습니다. 그가 Option Explicit을 켜려면 심지어 컴파일도되지 않지만, 꺼져 있기 때문에 vbCrLf은 문자 배열로 해석 될 수 있습니다. 그리고이 코드에서, 그 무슨 정확히 :

Sub Main() 
    Dim z As String = "The quick brown" & vbCrLf & " fox jumps over the lazy dogs." 
    Dim a() As String = z.Split(vbCrLf) 
    For Each c As String In a 
     Console.WriteLine(c) 
    Next 
    Console.ReadKey(True) 
End Sub 

당신은 1과 해당 문자열의 2 부분 사이의 두 개의 줄 바꿈을 볼 수 있습니다. 뭔가 다른 것이 공간을 벗겨 내고 있습니다. 더 큰 코드 블록을 공유 할 수 있습니까?

+0

그래, 요엘이 한 말. 하나의 라이너로 가면 더 깨끗하고 간결합니다. 또한 ReadAllLines는 cr, lf 및 crlf 구분 기호가있는 파일을 처리하며 바이트 순서를 인식하므로 더 나은 미래 증거 솔루션입니다. –

관련 문제