0

Visual Studio 2010 で vb を使用してバーコード スキャン プログラムを作成しています。

私はかなり遠くまで来ましたが、この小さな問題で立ち往生しているようです。

テキストファイルを保存し、その中のデータを次のように表示しました。

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 桁のコードを表示し、もう 1 つは製品名を表示します。(これは単なるテスト シナリオでした)

私が本当にやりたいことは、「0004」などのユーザー入力番号である変数をファイルで検索することです。これにより、「スモークビット」が表示されます。

正しい数値に到達するまで1行ずつ読み込んでから、おそらく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
4

2 に答える 2

0

彼らが言うように、時期尚早の最適化は諸悪の根源です。アイテムの説明が必要になるたびにファイルを読み取るのではなく、一度 (アプリケーションの開始時に) ファイルを読み取り、メモリに (おそらく としてDictionary(of Integer, String)) 格納してから、アイテムの説明を取得しようとするときにこれを参照する必要があります。アイテム。

もちろん、さらに進んでカスタム クラスを作成し、各エントリに関する追加情報を保存することもできます。

于 2012-12-13T04:56:12.143 に答える
0

Origin が言うように、このファイルを提供してもメモリを消費しすぎるほど大きくないため、データを 1 回読み取ることが最善の方法です。

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 は簡単なオプションです。

于 2012-12-13T14:52:04.860 に答える