我有一个名字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
}
}
答案 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.Range
与Where
相结合来查找indexes
"David"
在那个清单里面。然后,您使用indexes
和Insert
方法在名称"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);