2009-06-16 55 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 ..我們同時發佈了這個解決方案。 :-)我會刪除我的,因爲你實際上有一個代碼示例。 – 2009-06-16 01:57:24

+0

嗯 - 他可以在單行內做到這一點 – 2009-06-16 02:00:17

0

得說我從來沒有見過這樣做,我已經廣泛使用了String.Split。他們真的真的離開了,還是它是調試器的詭計?

實際上沒有任何.Split方法將一個字符串作爲參數,因此VB編譯器會在後臺執行「事情」來選擇不同的過載。要嘗試強制正確超載,您可以嘗試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部分之間看到兩個換行符。別的東西正在剝離空間。你可以分享更大的代碼塊嗎?