通过当前行索引查找前一行或下一行

本文关键字:一行 索引查找 | 更新日期: 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扩展方法SkipFirst

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,你会得到一个想法。