2017-02-09 3 views
0

テキストファイルから日付順にデータをツリービューに読み込むことはできますか?私はツリービューにロードするいくつかの.txtファイルを持っています。それらの.txtファイルでは、私はNameStart dateを持っていて、それらの名前を日付順にロードしたいと思っています。データをツリービューで日付順にロードするC#winforms

今私が持っている:日付と名前をテキストファイルに次のようになります

string[] animeMainNodeString = animeMainNode.ToArray(); // Parent Nodes Array 

List<string> animeSubNodesList = new List<string>(); 

// Add a child for each Parent in array 
for (int i = 0; i < animeMainNodeString.Length; i++) 
{ 
    string name = animeMainNodeString[i]; // Parent name in array 

    //Search for a .txt files in folders with Parent Nodes names 
    foreach (var subnode in Directory.GetFiles(animeGroupPath + "\\" + name, "*.txt").Select(Path.GetFileNameWithoutExtension).OrderBy(f => f)) 
    { 
     //Read a text file 
     var animeFileRead = File.ReadAllLines(animeGroupPath + "\\" + name + "\\" + subnode + ".txt"); 
     // Titel from this text file 
     string Title = animeFileRead[0].Substring(animeFileRead[0].IndexOf('=') + 1); 

     // Start Date from text file 
     string startDate = animeFileRead[7].Substring(animeFileRead[7].IndexOf('=') + 1); 
     string TitleStart = Title + "," + startDate; 

     // Add to a list where are all names/start dates from this Parent  
     animeSubNodesList.Add(TitleStart); 
    } 

    /* 
    * Here i want to somehow sort the Names by start date 
    * but i have no idea if this is possible. 
    */ 

    foreach (var item in animeSubNodesList) // Add childNode to parent 
    { 
     tvGroups.BeginUpdate(); 

     tvGroups.Nodes[i].Nodes.Add(item); 

     tvGroups.EndUpdate(); 
    } 
} 

Title=TestStartDate=1986-12-20

Soryコードの混乱のために、私はまだ学んでいます。

答えて

1

型付きリストのほうがずっと簡単です。私は確信していませんが、後であなたはそれを反復せずにリスト全体をツリービューに束縛することができます。

public class AnimeInfo 
{ 
    public string Title { get; set; } 
    public DateTime StartDate { get; set; } 
    public string TitleStart { get; set; } 
} 


     string[] animeMainNodeString = animeMainNode.ToArray(); // Parent Nodes Array 

     List<AnimeInfo> animeSubNodesList = new List<AnimeInfo>(); 

     // Add a child for each Parent in array 
     for (int i = 0; i < animeMainNodeString.Length; i++) 
     { 

      string name = animeMainNodeString[i]; // Parent name in array 

      //Search for a .txt files in folders with Parent Nodes names 
      foreach (var subnode in Directory.GetFiles(animeGroupPath + "\\" + name, "*.txt").Select(Path.GetFileNameWithoutExtension).OrderBy(f => f)) 
      { 
       AnimeInfo info = new AnimeInfo(); 
       //Read a text file 
       var animeFileRead = File.ReadAllLines(animeGroupPath + "\\" + name + "\\" + subnode + ".txt"); 
       // Titel from this text file 
       info.Title = animeFileRead[0].Substring(animeFileRead[0].IndexOf('=') + 1); 

       // Start Date from text file 
       info.StartDate = animeFileRead[7].Substring(animeFileRead[7].IndexOf('=') + 1); 
       info.TitleStart = info.Title + "," + info.StartDate; 

       // Add to a list where are all names/start dates from this Parent  
       animeSubNodesList.Add(info); 
      } 
      animeSubNodesList = animeSubNodesList.OrderBy(x => x.StarteDate).ToList(); 
      /* 
      * Here i want to somehow sort the Names by start date 
      * but i have no idea if this is possible. 
      */ 

      foreach (var item in animeSubNodesList) // Add childNode to parent 
      { 
       tvGroups.BeginUpdate(); 

       tvGroups.Nodes[i].Nodes.Add(item); 

       tvGroups.EndUpdate(); 
      } 
+0

StarteDateは文字列です。文字列で注文しようとしましたか? – KernelMode

+0

時間をかけてここに投稿していただきありがとうございます:)すべて動作します! – Bongskie

+0

NP。 1月1日がStartDateでどのように表されますか? "1984 - 01 - 01"または "1984 - 1 - 1"? – KernelMode

1

あなたはStartDateDateTimeに変換して、ツリーに追加する前に、リストを注文することができます、私はAnimeInfoDateTimeとしてStartDateフィールドタイプを持っていることを好むだろうと実行するためにとにかく

var ordered = animeSubNodesList.OrderBy(x => ConvertToTime(x.StartDate)); 

foreach (var item in ordered) // Add childNode to parent 
{ 
     tvGroups.BeginUpdate();  
     tvGroups.Nodes[i].Nodes.Add(item);  
     tvGroups.EndUpdate(); 
} 


private static DateTime ConvertToTime(string time) 
{ 
      return DateTime.Parse(time.Replace(" - ", "/")); 
} 

ファイルからの読み取り時にDateTime(1回のみ)に変換されます。

さらに、1桁の月と日がどのように表されているかについては言及していません(1986/01/01または1986/1/1)。したがって、どのケースでも機能する日付変換のソリューションを提案しました。後の表記を使用すると、文字列による並べ替えでは不十分です。

List<string> dates = new List<string>(); 
dates.Add("1986 - 1 - 1"); 
dates.Add("1986 - 2 - 1"); 
dates.Add("1986 - 10 - 1"); 
var ordered = dates.OrderBy(x => x).ToList(); // wrong order 

// ordered = {"1986 - 1 - 1", "1986 - 10 - 1", "1986 - 2 - 1"} 
+0

あなたの時間をありがとう、私はあなたが書いたように@Rick jamesが 'AnimeInfo'で書き、DateTimeに変換したように – Bongskie

関連する問題