通过当前行索引查找前一行或下一行
本文关键字:一行 索引查找 | 更新日期: 2023-09-27 18:02:27
我正试图找出如何通过当前行索引获得前一行或下一行的代码。
程序只是将行写入文本文件,但如果行已经存在,我想找到并读取存在行,但通过存在行的当前索引获得前一行或下一行。
如果当前不可分割,则下一行,如果可分割,则上一行,以获得此结果,例如我的文本文档内容:
if exist is "phrase1" it is indivisible index so show me: "phrase2"
if exist is "phrase2" it is divisible index so show me: "phrase1"
if exist is "phrase3" it is indivisible index so show me: "phrase4"
if exist is "phrase4" it is divisible index so show me: "phrase3"
if exist is "phrase5" it is indivisible index so show me: "phrase6"
为了清楚起见,我再次将不可分割的索引称为1,3,5,7,9等,因此,如果在文本文档中存在查找行,位于具有不可分割索引号的行,在这种情况下,我想获得下一行。如果是2 4 6 8等等,我想要得到前一个。例如,如果exist found line在索引号为1的行上,我想从第2行获取输出短语,换句话说(+ 1)到当前索引。但是,如果exist found line位于索引为2的行,则给当前索引1,(-1)。如果是3,给我4。如果4给我3,等等
所以如果我这样做:
string [] allLines = File.ReadAllLines("testFile.txt");
for (int i = 0; i < allLines.Length-2; i++)
{
if ((i+1) % 2 == 0)
{
Console.WriteLine("Next Line: " + allLines[i+2]);
}
else
{
Console.WriteLine("Previous Line: " + allLines[i-1]);
}
}
我得到错误"类型为'System的未处理异常。IndexOutOfRa·ngeException'发生在03_WORKFILE.exe"并且也不确定如何将其与上面的代码组合。
编辑:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
string[] allLines = new string[]
{
@"word1",
@"word2",
@"word3",
@"word5",
@"word6"
};
string input = "word6";
var index = Array.FindIndex(allLines, line => line == input);
Console.WriteLine(index);
if (index % 2 == 0)
{
Console.WriteLine("Next Line : " + allLines.Skip(index + 1).First());
}
else
{
Console.WriteLine("Previous Line : " + allLines.Skip(index - 1).First());
}
Console.Read();
}
}
我建议使用Linq
扩展方法Skip
和First
。
string [] allLines = File.ReadAllLines("testFile.txt");
// if you found a match to the given string and
// you know the index `i` for a matching string then...
var previousLine = allLines.Skip(i-1).FirstOrDefault();
var nextLine = allLines.Skip(i+1).FirstOrDefault();
你需要照顾边界条件,我把它留给你来添加(例如,如果i=0
,那么就不会有任何先前的元素)。
检查这个Demo
,你会得到一个想法。