2016-08-16 2 views
1

このコードの現在の行インデックスで前または次の行を取得する方法を理解しようとしています。現在の行インデックスの前または次の行

プログラムは行をテキストファイルに書き出しますが、行がすでに存在する場合は、見つかった行と読み込みたい行がありますが、現在の行の現在の行の前または次の行を取得します。現在の場合

次の行は、不可分以前で割り切れるならば、例えば、私のテキストドキュメントの内容この結果を得るために:再び私は不可分のインデックスを呼び出す明確にするために

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行がインデックス番号1でオンラインになっている場合は、2行目の出力句、つまり現在のインデックスに+1します。しかし、見つかった行がインデックス2に並んでいる場合は、現在のインデックスに1、(-1)を与えます。 3ならば4は私の3を得た場合、私に4を与える、など

ので、私は何とかこのように行く場合:

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 "で発生し、上記のコードと組み合わせる方法もわかりません。

EDIT:

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(); 

    } 

} 

答えて

0

私は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が表示されます。

+0

_hello、フィードバックいただきありがとうございます。私はCで新しくなりました。私の例では、上記のメインコードと組み合わせる方法を教えてください。 –

+0

@zrubiデモをチェックすると、アイデアが得られます。 –

+0

私は必要なものをexasedly、私は上記の私のケースの編集であなたのソリューションを追加しましたが、次の行が空であれば、範囲外のインデックスについても同じエラーがありますが、このエラーを回避する方法は考えていません –

関連する問題