none
有沒有 由文字檔中讀取數字的簡單方法 RRS feed

  • 問題

  • 討論區的大大們好:

    小弟目前需要將以前由c++程式輸出的文字檔用VB.net讀出,檔案內容大致如下:

        1    0.00000    0.00000    0.55572     0.58193     0.04780     0.00998    -0.01930     0.00609    -0.05479     0.00387
       10    0.00000    0.00000    0.12156     0.12377     0.08682     0.00000     0.22270     0.00001     0.79894     0.00063
       20    0.00000    0.00000    0.11862     0.11812     0.08569     0.00000     0.30679     0.00000     0.85552     0.00009
       30    0.00000    0.00000    0.11751     0.11553     0.08470     0.00000     0.33589     0.00000     0.88467     0.00001

    1 10 20 30 開頭的數字都包含一整行的資料。除了開頭單位是int以外,其他的數字都是Single。

    目前可以想到的方法中,採用filestream讀入資料,streamreader.readline()來讀資料,然後再一個個拆開來讀取資料。

    是否有一個比較方便的方法,能夠快速/安全的讀取資料?因為單一檔案每行的數字的個數都相同,但是各個檔案的數字個數都不同。

    2006年8月5日 上午 05:41

解答

  • 目前沒有。

    我自己有個自訂函數:

    http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Function&Module=6&Function=18

    假定一行讀進來是 strLine

    則 Dim arrRow As Object = InstrString(strLine, " ", , True, True)

    會自動依據連續、空白分隔,切成多個欄位,所以

    arrRow(0) = 1
    arrRow(1) = 0.
    ...

    引數說明請看該網址。

    2006年8月5日 上午 09:59
    版主
  • HI,

    好像沒有很方便的做法, 只能讀進來判斷, 例如:

    Dim sr As StreamReader = New StreamReader("Number.txt")
            
    Dim s As String = sr.ReadToEnd

    Dim ca(1) As Char
    ca(0) = " "
    ca(1) = vbCrLf

    Dim buf() As String = s.Split(ca)
    Dim al As ArrayList = New ArrayList

    For Each ele As String In buf
        If ele <> "" Then
            al.Add(ele)
        End If
    Next

    tihs

    2006年8月6日 上午 02:39

所有回覆

  • 目前沒有。

    我自己有個自訂函數:

    http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Function&Module=6&Function=18

    假定一行讀進來是 strLine

    則 Dim arrRow As Object = InstrString(strLine, " ", , True, True)

    會自動依據連續、空白分隔,切成多個欄位,所以

    arrRow(0) = 1
    arrRow(1) = 0.
    ...

    引數說明請看該網址。

    2006年8月5日 上午 09:59
    版主
  • HI,

    好像沒有很方便的做法, 只能讀進來判斷, 例如:

    Dim sr As StreamReader = New StreamReader("Number.txt")
            
    Dim s As String = sr.ReadToEnd

    Dim ca(1) As Char
    ca(0) = " "
    ca(1) = vbCrLf

    Dim buf() As String = s.Split(ca)
    Dim al As ArrayList = New ArrayList

    For Each ele As String In buf
        If ele <> "" Then
            al.Add(ele)
        End If
    Next

    tihs

    2006年8月6日 上午 02:39