前提・実現したいこと
配列のSortに関する質問です。
名前に日付が含まれる数個のファイルを読み込み配列に格納。
ファイル名の日付を抽出しそれをもとにSortし日付の若い順にファイルを別のメソッドで読み込む。
<ファイル名例>
・aiueo20190505.xlsx
・kakiku20190706.xlsx
・sashisu20190122.xlsx
補足情報等必要でしたらおっしゃっていただければ幸いです。
どうぞよろしくお願いいたします。
現在の状況
以下のコードを試してみたのですが、思い通りの順番に並ばない状態です。
該当のソースコード
C#
1private void DoImportFiles(string[] xlsxfiles) 2 { 3 SortByDate comp = new SortByDate(); 4 Array.Sort(xlsxfiles, comp); 5 6 foreach (string xlsxfile in xlsxfiles) 7 { 8 // 1ファイルづつ処理する 9 DoImportFile(xlsxfile); 10 } 11 12 } 13 14public class SortByDate : IComparer 15 { 16 public int Compare(object x, object y) 17 { 18 string str1 = (string)x; 19 string str2 = (string)y; 20 DateTime date1; 21 DateTime date2; 22 23 Regex re = new Regex(@"[^0-9]"); 24 25 //数字以外を削除 26 str1 = re.Replace(str1, ""); 27 str1 = str1.Insert(4, "/"); 28 str1 = str1.Insert(7, "/"); 29 str2 = re.Replace(str2, ""); 30 str2 = str2.Insert(4, "/"); 31 str2 = str2.Insert(7, "/"); 32 33 //数字文字列を数値に変換 34 //num1 = int.Parse(str1); 35 //num2 = int.Parse(str2); 36 date1 = DateTime.Parse(str1); 37 date2 = DateTime.Parse(str2); 38 39 // return (date1 - date2).Days; 40 return date1.CompareTo(date2); 41 42 } 43 }
試したこと
ここのサイトを参考にIComparerを使用しSortしようとしてみました。
http://chunye.seesaa.net/article/423464142.html
補足
入力ミスそご指摘いただきまして、サンプルのファイル名を正しいものに変更しました。
読み込むファイル名の形式は
<文字列><8桁の数字>.xlsx
という順番の組み合わせです。
回答3件
あなたの回答
tips
プレビュー