2012-07-12 115 views
0

希望人們可以提供幫助!文本文件中的組合框值

我正在嘗試創建一個組合框,用一個文本文件中的信息填充,這個文本文件使用分隔符作爲分隔符。 IE

對象A,研究生,N,也就是說,5,moretext

我需要的各個領域,作爲整數/布爾/字符串..但我有越來越的代碼來做到這一點問題工作正常

我搜查了網絡,發現這個代碼,但它不適合我。也許我是愚蠢的,但希望有人能幫助我。幫助我哦互聯網大師!

Public Sub meritlist() 
    Dim looksups As New ArrayList 
    ' This call is required by the Windows Form Designer. 
    InitializeComponent() 

    Dim rdr As IO.StreamReader = IO.File.OpenText(c:merits.txt") 
    While Not rdr.EndOfStream 
     Dim line As String = rdr.ReadLine() 

     'Split the line by a comma: 
     Dim arrayList = line.Split(",") 

     'Get the right values: break down is as: Merit Name,Type,Shared,Carthan,Max,Pre-Req 
     Dim meritname As Integer = arrayList(0) 
     Dim merittype As String = arrayList(1) 
     Dim meritshared As Boolean = arrayList(2) 
     Dim carthan As String = arrayList(3) 
     Dim meritmax As Integer = arrayList(4) 
     Dim prereq As String = arrayList(5) 

     cmoMRDro.Items.Add(New lookups(arrayList(0), arrayList(1))) 

    End While 
    rdr.Close() 
End Sub 
+0

1.)文件路徑不正確。這是一個錯字嗎? 2.)'objecta,grad,N'不屬於'整數/布爾值/字符串'。對於ex'單詞,5,moretext'屬於類別字符串/ Integer/string' – 2012-07-12 10:10:33

+0

1)更改爲使其適合頁面,但它是正確的。 2)是的,我有點兒搗碎了一個例子來展示它的外觀。功能名稱,價值類型,carthan和prereq都是字符串。我意識到現在我把共享作爲一個N而不是錯誤的選項。 – AndrewMantis 2012-07-12 11:31:20

回答

1

有4件事我會建議。

  1. 使用TextFieldParser類讀取分隔/固定寬度的文本文件。他們更專業地從事這項工作,並且已經有適當的代碼來處理它。

  2. 不需要致電InitializeComponent

  3. 創建一個結構/類來存儲您的訂單項,而不是原始變量。這樣你就可以更有條理地進行。

  4. 使用List該結構/類的,而不是ArrayList

雖然你已經做可以與一些修改予以糾正,我會做這種方式,保持我所有的建議以上給出。所以你可以看到它變得如此簡單:

Structure MeritListType 
    Dim meritname As Integer 
    Dim merittype As String 
    Dim meritshared As Boolean 
    Dim carthan As String 
    Dim meritmax As Integer 
    Dim prereq As String 

    Public Sub New(ByVal data() As String) 
     meritname = Integer.Parse(data(0)) 
     merittype = data(1) 
     meritshared = Boolean.Parse(data(2)) 
     carthan = data(3) 
     meritmax = Integer.Parse(data(4)) 
     prereq = data(5) 
    End Sub 
End Structure 

Public Sub MeritList() 
    Dim FileData As New List(Of MeritListType) 
    Dim tfp As New FileIO.TextFieldParser("c:\merits.txt") 
    tfp.TextFieldType = FileIO.FieldType.Delimited 
    tfp.SetDelimiters(",") 
    While Not tfp.EndOfData 
     FileData.Add(New MeritListType(tfp.ReadFields)) 
    End While 
    tfp.Close() 

    '' you have the records in FileData 
    '' do whaever you want to do with it here now 

End Sub 
+0

+ 1對於TextFieldParser建議。我絕對同意你的看法。 – 2012-07-12 10:11:47

+0

試圖使用這個,但它帶來了一個錯誤filedata.add(new meritlistype(ftp.readfields))..說它沒有構造函數.. – AndrewMantis 2012-07-12 13:27:43

+0

我覺得你忘了把'公共小組新(ByVal數據( )As String)'在你的結構中。你需要把這個。而且您還需要修改該值,以便您的值正確轉換爲正確的數據類型。例如你可能在字段中有'F',並且直接轉換爲布爾值是不可能的。所以你需要適當地修改該塊。 :) – 2012-07-12 13:49:50