次の例は、任意の単語またはフィールド(LINQ)(C#)によるテキストデータの並べ替えまたはフィルタ処理に関するmsdn記事の例です。私は同じことをしたいと思いますが、私が持っているテキストファイルは.csvファイルではなく、区切り文字としてカンマを持たず、フィールド/列の開始位置と終了位置を指定する必要があります。開始位置と終了位置を使用してLINQで列ごとにテキストファイルを並べ替える方法
public class SortLines
{
static void Main()
{
// Create an IEnumerable data source
string[] scores = System.IO.File.ReadAllLines(@"../../../scores.csv");
// Change this to any value from 0 to 4.
int sortField = 1;
Console.WriteLine("Sorted highest to lowest by field [{0}]:", sortField);
// Demonstrates how to return query from a method.
// The query is executed here.
foreach (string str in RunQuery(scores, sortField))
{
Console.WriteLine(str);
}
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
// Returns the query variable, not query results!
static IEnumerable<string> RunQuery(IEnumerable<string> source, int num)
{
// Split the string and sort on field[num]
var scoreQuery = from line in source
let fields = line.Split(',')
orderby fields[num] descending
select line;
return scoreQuery;
}
}
/* Output (if sortField == 1):
Sorted highest to lowest by field [1]:
116, 99, 86, 90, 94
120, 99, 82, 81, 79
111, 97, 92, 81, 60
114, 97, 89, 85, 82
121, 96, 85, 91, 60
122, 94, 92, 91, 91
117, 93, 92, 80, 87
118, 92, 90, 83, 78
113, 88, 94, 65, 91
112, 75, 84, 91, 39
119, 68, 79, 88, 92
115, 35, 72, 91, 70
*/
テキストファイルに区切り文字がない場合、上記の例を並べ替えるにはどうすればよいですか。たとえば、最初の行のすべてのコンマ区切り文字を上記の例から削除すると、11699869094 となるので、スコア欄は開始位置3と終了位置4にあり、値99が得られます。ソートされるフィールド/列の最終位置。
ありがとうございます!それはうまくいった! – ptn77
追加の列を追加したい場合は、次のように並べ替えることができますか?var scoreQuery =ソースの行から orderby line.Substring(3,2)and line.Substring(5,2) selectライン; – ptn77
'var scoreQuery =ソースからの行orderby line.Substring(3,2)descenting、line.Substring(5,2)降順セレクトライン;'参照http://stackoverflow.com/questions/298725/multiple-order- by-in-linq –