Get line number that contains a string

 ̄綄美尐妖づ 提交于 2019-12-25 05:15:45

问题


How to get a line number that contains a specified string in a text file?

Example text file contains:

Red
White
Yellow
Green

How to get "Yellow" line number? and can i write a string in a specified line, lets say i want to write a string in line 2?


回答1:


To find a line in a text file, you need to read the lines from the start of the file until you find it:

string fileName = "file.txt";
string someString = "Yellow";

string[] lines = File.ReadAllLines(fileName);
int found = -1;
for (int i = 0; i < lines.Length; i++) {
  if (lines[i].Contains(someString)) {
    found = i;
    break;
  }
}

If you want to change a line in a file, you have to read the entire file and write it back with the changed line:

string[] lines = File.ReadAllLines(fileName);
lines[1] = "Black";
File.WriteAllLines(fileName, lines);



回答2:


Dim toSearch = "Yellow"
Dim lineNumber = File.ReadLines(filePath).
                 Where(Function(l) l.Contains(toSearch)).
                 Select(Function(l, index) index)

If lineNumber.Any Then 
    Dim firstNumber = lineNumber.First
End If

Edit: If you want to write a string in that line, the best way would be to replace that line with the new one. In the following example i'm replacing all occurences of "Yellow" with "Yellow Submarine"

Dim replaceString = "Yellow Submarine"
Dim newFileLines = File.ReadLines(filePath).
                   Where(Function(l) l.Contains(toSearch)).
                   Select(Function(l) l.Replace(toSearch, replaceString))
File.WriteAllLines(path, newFileLines)

Or you want to replace a specific line:

Dim allLines = File.ReadAllLines(path)
allLines(lineNumber) = replaceString 
File.WriteAllLines(path, allLines)



回答3:


Imports System.IO

Dim int1 As Integer
Dim path As String = "file.txt"
Dim reader As StreamReader

Public Sub find()
    int1 = New Integer
    reader = File.OpenText(path)
    Dim someString As String = Form1.TextBox1.Text 'this Textbox for searching text example : Yellow
    Dim lines() As String = File.ReadAllLines(path)
    Dim found As Integer = -1
    Dim i As Integer
    For i = 0 To lines.Length - 1 Step i + 1
        If lines(i).Contains(someString) Then
            found = i
            int1 = i
            Exit For
        End If
    Next
    reader = File.OpenText(path)

    'if you want find same word then

    Dim lines2() As String = File.ReadAllLines(path)
    Form1.ListBox1.Items.Add(lines2(int1))
    int1 = New Integer
End Sub


来源:https://stackoverflow.com/questions/9946751/get-line-number-that-contains-a-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!