2016-04-15 3 views
1

リストボックスアイテムを日付でソートしようとしていますが、これを行う方法がわかりません。 Regexを使って日付を含む文字列を作成しましたが、この文字列を使ってlistBoxをソートする方法がわかりません。任意のアドバイスをいただければ幸いです..下記の私のコードをご覧ください。リストボックスを日付文字列でソートするC#

DirectoryInfo dir = new DirectoryInfo("../Debug/"); 
FileInfo[] files = dir.GetFiles("*.txt"); 

foreach (FileInfo file in files) 
{ 
    string dueDate = File.ReadAllText(file.Name); 

    Regex regex = new Regex(@"\d{2}/\d{2}/\d{4}"); 
    Match mat = regex.Match(dueDate); 

    string duedate = mat.ToString();//string containing date 
    listBox1.Items.Add(file); 
} 
+0

?ファイル名またはファイル内容? – C4u

+0

[アルファベット順のListBoxに表示されているものを表示](http://stackoverflow.com/questions/33963484/showing-what-is-displayed-in-listbox-in-alphabetical-order) –

+0

@JonnyAppleseed 'file.Name'に対して' ReadAllText'を使用しています。 'file.Name'はパスではなく名前だけを返します。だから、ユーザの 'ReadAllText(file)'か、名前自体 'string dueDate = file.Name'が必要な場合。 – C4u

答えて

0

これは私がそれに近づくだろうかです:あなたは日付を読みたいん

DirectoryInfo dir = new DirectoryInfo(@"../Debug/"); 
FileInfo[] files = dir.GetFiles("*.txt"); 
Dictionary<FileInfo, DateTime> filesWithDueDate = new Dictionary<FileInfo, DateTime>(); 

foreach (FileInfo file in files) 
{ 
    string dueDate = File.ReadAllText(file.FullName); 

    Regex regex = new Regex(@"\d{2}/\d{2}/\d{4}"); 
    Match mat = regex.Match(dueDate); 

    DateTime duedate = Convert.ToDateTime(mat.ToString()); 

    filesWithDueDate.Add(file, duedate); 
} 

var sortedFiles = filesWithDueDate.OrderBy(a => a.Value).Select(b => b.Key.Name).ToArray(); 

listBox1.Items.AddRange(sortedFiles); 
+0

ありがとう@jarednaszler。ほとんどの場合、残念ながらlistBoxには各項目の複数のインスタンスが設定されています..... – JonnyAppleseed

+0

@JonnyAppleseed - そのフォルダ内のファイルごとに1つの項目がリストされます。ユニークな支払期日などが必要ですか? – jaredbaszler

+0

"Stringが有効なDateTimeとして認識されませんでした。任意のアイデア...私はそれを完璧にあなたの助けを借りて働いていた... – JonnyAppleseed

関連する問題