user934820
user934820

Reputation: 1178

Search from a list of string() in VB.NET

I am trying to find if mylines() contains a value or not. I can get the value by mylines.Contains method:

Dim mylines() As String = IO.File.ReadAllLines(mypath)
If mylines.Contains("food") Then
    MsgBox("Value Exist")
End If

But the problem is that I want to check if mylines() contains a line which starts with my value. I can get this value from a single line by mylines(0).StartsWith method. But how do I find a string from all the lines which is starting from some value, e.g. "mysearch" and then get that line number?

I am using a for loop to do so, but it is slow.

For Each line In mylines
    If line.StartsWith("food") Then MsgBox(line)
Next

Constrained to code for .NET 2.0, please.

Upvotes: 1

Views: 11477

Answers (2)

DonBoitnott
DonBoitnott

Reputation: 11025

I'm not a VB guy, but I think you could use Linq:

Dim mylines() As String = IO.File.ReadAllLines(mypath)
??? = mylines.Where(Function(s) s.StartWith("food")) //not sure of the return type

Check out: How do I append a 'where' clause using VB.NET and LINQ?

Upvotes: 1

tinstaafl
tinstaafl

Reputation: 6948

Here's one way with Framework 2.0 code, simply set SearchString with the the string you want to search for:

Imports System.IO
Public Class Form1
    Dim SearchString As String = ""
    Dim Test() As String = File.ReadAllLines("Test.txt")

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        SearchString = "Food"
    End Sub

    Private Function StartsWith(s As String) As Boolean
        Return s.StartsWith(SearchString)
    End Function

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim SubTest() As String = Array.FindAll(Test, AddressOf StartsWith)
        ListBox1.Items.AddRange(SubTest)
    End Sub
End Class

When I test this with a file with 87,000 lines, it takes about .5 sec, to fill the listbox.

Upvotes: 1

Related Questions