2012-04-30 10 views
5

アイテム/値をテキストファイル内で上下に移動するにはどうすればよいですか?私のプログラムはテキストファイルを読み込んだ瞬間、読み込むべき行がなくなったときに、それを止めるためにしばらく使います。 if文を使用して、カウンタが移動したい値の行と等しいかどうかを確認しました。私はここからどのように続行するのか分からない。テキストファイル内でアイテムを上下に移動するには

_upORDown = 1; 

    using (StreamReader reader = new StreamReader("textfile.txt")) 
    { 
     string line = reader.ReadLine(); 
     int Counter = 1; 
     while (line != null) 
     { 

      if (Counter == _upORDown) 
      { 
       //Remove item/replace position 

      } 
      Counter++; 
     } 
    } 
+0

。 – Zaki

+0

Counter == _upDownownのときはどうしたらいいですか?あなたはファイルを書き出す予定ですか? – Robaticus

+0

while(line!= null)の代わりに 'while(!reader.EndOfStream)'を実行することもできます ループの中で 'line = reader.ReadLine()'する必要があります。無限ループ。 – DangerMonkey

答えて

3

メモリ内のファイルを読み取り、必要な場所にその行を移動してファイルを書き戻すことができます。 ReadAllLinesWriteAllLinesを使用できます。

このコードは、1行上に位置iに文字列を移動:LINQを使用して、dasblinkenlightの答え@

if (i == 0) return; // Cannot move up line 0 
string path = "c:\\temp\\myfile.txt"; 
// get the lines 
string[] lines = File.ReadAllLines(path); 
if (lines.Length <= i) return; // You need at least i lines 
// Move the line i up by one 
string tmp = lines[i]; 
lines[i] = lines[i-1]; 
lines[i-1] = tmp; 
// Write the file back 
File.WriteAllLines(path, lines); 
+0

私は何行ですか? – user1285872

+0

@ user1285872 'i'は、1つ上に移動したいゼロベースの行番号に設定された整数変数です。 – dasblinkenlight

+0

"エラー System.Arrayに 'length'の定義が含まれておらず、 'System.Array'タイプの最初の引数を受け入れる拡張メソッド 'length'が見つかりませんでした。あなたはusingディレクティブまたはアセンブリ参照がありません?) " if(lines.length <= line)return; – user1285872

0

string path = "c:\\temp\\myfile.txt"; 
var lines = File.ReadAllLines(path); 
File.WriteAllLines(
    path, 
    lines.Take(i).Concat(
     lines.Skip(i+1) 
    ) 
); 

これは位置i(ゼロベース)のラインを削除他の行を上に移動します。

新しい行を追加する:あなたが値を置き換えるファイルを読み、古いバージョンを上書きし、それを書き戻すことができ

string path = "c:\\temp\\myfile.txt"; 
var lines = File.ReadAllLines(path); 
var newline = "New line here"; 
File.WriteAllLines(
    path, 
    lines.Take(i).Concat(
     new [] {newline} 
    ).Concat(
     lines.Skip(i+1) 
    ) 
); 
関連する問題