查找姓名并添加句子

时间:2018-05-08 10:45:52

标签: c#

我有一个名字List(name.txt),想要找到“David”这个名字,在添加“找到我的名字”之前的一行

例如:

Name.txt:

  

Jacob
William
Ethan
James
  的大卫

我想=

  

Jacob
William
Ethan
James
  “找到我的话”
  的大卫

提示:大卫名称可能已多次重复。

我想重复“找到我的话”。

我的代码:

private void button1_Click(object sender, EventArgs e)
{
    if (File.Exists("name.txt"))
    {
        string content = File.ReadAllText("name.txt");
        string sensentence = "find my name"; 
        //I don't know how to proceed
    }
}

4 个答案:

答案 0 :(得分:1)

您可以将这些行转换为列表并查找"David"的所有索引。以相反的顺序迭代所有索引,并在识别的索引中插入新文本。

最后你可以把文件写回来。

尝试像followong这样的代码。它会起作用。

        var allLines = File.ReadAllLines(@"d:\name.txt").ToList();
        IEnumerable<int> allIndices = allLines.Select((s, i) => new { Str = s, Index = i })
                    .Where(x => x.Str == "David")
                    .Select(x => x.Index);

        foreach (int matchingIndex in allIndices.Reverse())
        {
            allLines.Insert(matchingIndex, "find my name");
        }          
        File.WriteAllLines(@"d:\name.txt", allLines.ToArray());

答案 1 :(得分:0)

首先,您可以使用File.ReadAllLines并将名称存储在列表中,然后您可以使用Enumerable.RangeWhere相结合来查找indexes "David"在那个清单里面。然后,您使用indexesInsert方法在名称"find my name"之前的列表中插入"David"

if (File.Exists(@"D:\name.txt"))
{
    List<string> nameList = File.ReadAllLines(@"D:\name.txt").ToList();
    int[] indexes = Enumerable.Range(0, nameList.Count).Where(i => nameList[i] == "David").ToArray();
    int shift = 0;
    foreach (var index in indexes)
    {
        nameList.Insert(index + shift, "find my name");
        shift++;
    }

    File.WriteAllLines(@"D:\name.txt", nameList);
}

答案 2 :(得分:0)

File.ReadAllLines()File.WriteAllLines()可以打开文件并对其进行读取或写入,并在每次操作后关闭文件。

File.ReadAllLines()返回的字符串数组可用作源,对其元素执行必要的更改,然后使用File.WriteAllLines()再次写入:

string Sentence = "Find my name";
string MyName = "David";

if (File.Exists("[SomeFilePath]")) {
    string[] AllNames = File
                .ReadAllLines("[SomeFilePath]")
                .Select(name => { return (name == MyName) 
                                ? Sentence + Environment.NewLine + name : name;
              }).ToArray();

    if (AllNames.Count() > 0)
        File.WriteAllLines("[SomeFilePath]", AllNames);
}

答案 3 :(得分:-1)

以下代码对您有所帮助,

string line = string.Empty;
//lines used to store the lines read from the file
List<string> lines = new List<string>();
//path used to store the path of the file 
string path = @"c:\Name.txt";
//check whether file exists or not
if (File.Exists(path)) {
    System.IO.StreamReader file = new System.IO.StreamReader(path);
    //read the line from file
    while ((line = file.ReadLine()) != null) {
        //check whether line is equal to the searched word
        if (line == "David") { // Give your search term here!
            lines.Add("\"find my word\"");
        }
        //add the line to lines string list
        lines.Add(line);
    }
    //close the file
    file.Close();
}  
//write all the lines stored in lines to the file
File.WriteAllLines(path, lines);