2016-11-06 13 views
0

CSVファイルを2つの値で検索する方法を教えてもらえますか? CSVファイルは次のようになります。CSVファイルを2つの値(VB)で検索するには

1,"Garry","Tall","4545" 
2,"Julius", "Short", "2564" 

そして、4545番号が同じ行のGarryと一致することを確認したいと思います。例えば、ユーザは4545を入力し、名前Garryとコードはcsvがこれら2つの値と一致するかどうかをチェックする。しかし、単一の値だけではなく、名前と番号が一致する必要があります。

Visual Basicにcsvファイルを読み込む方法や検索方法がわかりません。だから、どんな助けでも大歓迎です。私は過去2時間オンラインで探していますが、これまでのところ何も働いていないようです。

Public Function CheckRegistrationKey(ByVal Name As String, ByVal Number As Integer) 

    Dim filepath As String = My.Computer.FileSystem.SpecialDirectories.Desktop("\File1.csv") 
    Dim Key As String 

    Dim NameToSearhFor As String = Name 
    Dim NumberToSearchFor As Integer = Number 

    'Load file 

    'Search file for values 

    'return true if found 
    'return false if not found 

End Function 

更新

'Load file 
     Using MyReader As New FileIO.TextFieldParser(filepath) 
      MyReader.TextFieldType = FileIO.FieldType.Delimited 
      MyReader.SetDelimiters(",") 
      Dim currentRow As String() 
      While Not MyReader.EndOfData 
       Try 
        currentRow = MyReader.ReadFields() 
        Dim currentField As String 
        For Each currentField In currentRow 
         'MsgBox(currentField) 
        Next 
       Catch ex As Microsoft.VisualBasic. 
        FileIO.MalformedLineException 
       End Try 
      End While 
     End Using 

今、私はちょうど値を検索する方法を考え出す必要があります。

+0

データをロードするには、[TextFieldParser Class](https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser(v = vs.110).aspx)を使用します。各データ項目(ID、名字、姓、キー)のクラスを作成し、そのクラスのリストをすべての行に使用することをお勧めします。 –

答えて

1

あなただけの今まで一度、あなたの提案のコードは十分ですが、あなたはユーザーをチェックする必要がある場合は、より多くのこのようなより多く、その後何度も何かが良いかもしれ一人のユーザーを確認する必要がある場合:

Option Infer On 
Option Strict On 

Module Module1 

    Dim data As List(Of datum) 

    Public Class datum 
     Property ID As Integer 
     Property FirstName As String 
     Property LastName As String 
     Property Key As Integer 
    End Class 

    Function LoadData(srcFile As String) As List(Of datum) 
     Dim data As New List(Of datum) 

     Using tfp As New FileIO.TextFieldParser(srcFile) 
      tfp.TextFieldType = FileIO.FieldType.Delimited 
      tfp.SetDelimiters(",") 
      tfp.HasFieldsEnclosedInQuotes = True 

      Dim currentRow As String() 
      Dim currentLine = 0 

      While Not tfp.EndOfData 
       currentLine += 1 
       Try 
        currentRow = tfp.ReadFields() 
        If currentRow.Length = 4 Then 
         data.Add(New datum With {.ID = CInt(currentRow(0)), .FirstName = currentRow(1), .LastName = currentRow(2), .Key = CInt(currentRow(3))}) 
        End If 
       Catch ex As Exception 
        MsgBox($"Error in file {srcFile} at line {currentLine}: {ex.Message}") 
       End Try 
      End While 
     End Using 

     Return data 

    End Function 

    Function IsValidUser(firstname As String, key As Integer) As Boolean 
     If data Is Nothing Then 
      Throw New Exception("Data has not been initialised.") 
     End If 

     Return data.Any(Function(d) d.FirstName = firstname AndAlso d.Key = key) 

    End Function 

    Sub Main() 
     Dim srcFile = "C:\temp\sampledata2.txt" 
     data = LoadData(srcFile) 

     For Each user In {"Garry", "Harry"} 
      Console.WriteLine($"Found {user}: " & IsValidUser(user, 4545).ToString()) 
     Next 


     Console.ReadLine() 

    End Sub 

End Module 
0

これは最も効率的な方法ではないかもしれませんが、以下で詳しく説明するようにコードを作成しました。

'Load file 
     Using MyReader As New FileIO.TextFieldParser(filepath) 
      MyReader.TextFieldType = FileIO.FieldType.Delimited 
      MyReader.SetDelimiters(",") 
      Dim currentRow As String() 
      While Not MyReader.EndOfData 
       Try 
        currentRow = MyReader.ReadFields() 
        Dim LastName As String = currentRow(1) 
        Dim Key As String = currentRow(4) 

        If LastName = "Garry" And Key = "6565" Then 
         'id correct 
        Else 
         'id wrong 
        End If 

       Catch ex As Microsoft.VisualBasic. 
        FileIO.MalformedLineException 
        'Error code here 
       End Try 
      End While 
     End Using 
関連する問題