2012-12-13 28 views
0

我正在Visual Studio 2010中使用vb创建一个条形码扫描程序。从文本文件中的列表中读取某个行,并在列表框中显示,Visual Studio 2010

我来了很远,但似乎卡住了这个小问题。

我有保存的文本文件并在它的数据显示如下:

0001#Unsmoked Middle Bacon 
0002#Smoked Middle bacon 
0003#Unsmoked Bits 
0004#Smoked Bits 
0005#Unsmoked Back 
0006#Smoked Back 
0007#Unsmoked Streaky 
0008#Smoked Streaky 

我没有问题,阅读和分裂与#字符串,我可以填充2个列表框,1显示4位代码,另一个是产品名称。 (这只是一个测试场景)

我真正想要做的是搜索一个变量,这是一个用户输入数字,如“0004”的变量,这将显示回给我“烟熏的位”。

我想我想逐行读取,直到它打到正确的数字,然后阅读也许使用substr?你们大概可以在这里帮助我。

While Not sreader.EndOfStream        
       lineIn = sreader.ReadLine() 
       Dim elements() As String = Nothing      
       elements = lineIn.Split("#") 
       lstProdTest.Items.Add(elements(0)) 
       lstProdName.Items.Add(elements(1)) 
       PLUnumber(index) = elements(0) 
       itemName(index) = elements(1) 
       numProds = numProds + 1 
       index = index + 1 
      End While 

回答

0

原产说,提供这个文件的心不是那么大,消耗太多的内存,读取一次数据是要走的路:

Private _barcodes As Dictionary(Of Integer, String) 
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    'EDIT forgot to initialize _barcodes: 
    _barcodes = New Dictionary(Of Integer, String) 
    For Each line In IO.File.ReadAllLines("c:\path\to\file.txt") 
     Dim data = line.Split("#"c) 
     _barcodes.Add(CInt(data(0)), data(1)) 
    Next 
End Sub 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim input As String = InputBox("type the barcode to test, eg 0004:") 
    Dim key As Integer = CInt(input) 
    'if you entered 0004 then this will display Smoked Bits 
    If _barcodes.ContainsKey(key) Then 
     MessageBox.Show(_barcodes(key)) 
    Else 
     MessageBox.Show("Key not found") 
    End If 
End Sub 

注意这只是一个简单的例子,将需要错误处理要添加(丢失的文件,数据等的格式不正确)

如果数据量巨大的再考虑一个数据库,而不是,SQLite的将是一个简单的选择

+0

我可以看到这是如何工作现在:) 我似乎是sprin尽管在表单加载时出现错误。 “未将对象引用设置为对象的实例。” _barcodes.Add(CInt(data(0)),data(1)) 任何想法? –

+0

http://i.imgur.com/0QCwj.jpg –

+0

@RobbieSeath对不起,请参阅编辑 – Steve

0

正如他们所说,过早优化是所有弊端的根源。每次需要项目描述时,您应该一次读取文件(在应用程序开始时),将其存储在内存中(可能为Dictionary(of Integer, String)),然后在尝试获取描述时参考此文件一个物品。

你当然可以进一步创建一个自定义类来存储每个条目的附加信息。

相关问题