2017-01-04 7 views
-3

ファイルを1列、3行、最後の行の順にソートしたいと思います。 enter image description hereC#で3行後に行* .txtをソートする方法

マイコード:たとえば

String line; 
StreamReader file = new StreamReader(@"c:\file.txt"); 
StreamWriter fileSorted = new StreamWriter(@"c:\fileSorted.txt"); 
while ((line = file.ReadLine()) != null) 
{ 
    fileSorted.WriteLine(line); 
} 

file.Close(); 
fileSorted.Close(); 
+0

すでに行ったことのサンプルを提供してください。これは、他の人がコードを書くだけのフォーラムではありません。 –

+0

2番目の列は3番目と最後の列の間の要素だけを並べ替えたいですか? – Overmachine

+0

したがって、各グループ内の元のファイルから元の順序を維持しながら、最初の列の値をグループ化したいですか? – juharr

答えて

1

まず私は、データを読み書きするためにFile.ReadAllLinesFile.WriteAllLinesを使用すると思います。次に、最初の2行と最後の行をキャプチャし、残りの部分をソートするだけです。ソートは実際には最初の列の数値をグループ化しています(列間にスペースがあると仮定していますので、実際にタブであればそれを変更する必要があります)。次に、キー上のグループを順序付けして、SelectManyを使ってグループを平らにします。最後に、ヘッダーをソートされた行に連結し、トレーラーに連結してファイルに書き出します。

var input = File.ReadAllLines(@"c:\file.txt"); 

var header = input.Take(2); 
var sorted = input.Skip(2).Take(input.Length - 3) 
    .GroupBy(line => int.Parse(line.Substring(0, line.IndexOf(" ")))) 
    .OrderBy(g => g.Key) 
    .SelectMany(g => g); 
var trailer = input.Skip(input.Length - 1); 

File.WriteAllLines(@"c:\fileSorted.txt", header.Concat(sorted).Concat(trailer)); 
+0

Thxコードが機能します! –

+0

あなたのソリューションは良いですが、今はWriteAllLinesをファイルにする必要はありません。私はAllLinesをTAB []に書き込む必要があります。私はこれは簡単ですが、私はこれを行うことはできません... 今私は持っています: STRING [] TAB = Fille.ReadAllLines(@ "c:\ fileSorted.txt"); すぐに欲しいです(File.WriteAllLinesなし) STRING [] TAB = header.Concat(sorted).Concat(trailer); –

+0

私は何をしたいですか var ResualData = header.Concat(ソート済み).Concat(予告編); 文字列[]タブ=新しい文字列[dl]; int i = 0; foreach(ResualDataのvarアイテム) { tab [i] = item; i ++; } もっと速い方法を知っている方は、 –

関連する問題