0

以下の情報をテキストファイルに保存しました。ファイル ストリームとストリーム リーダー オブジェクトを使用して読み取ります。配列メソッドを取得しました:

string[] MyArray = allText.Split(new string[]{" ",Environment.NewLine},  
    StringSplitOptions.RemoveEmptyEntries);

これは、テキスト ファイルの内容全体を単語単位で分割して保存することです。

同じことをして、次のデータを多次元配列リストに格納するにはどうすればよいですか。並べることで。

Princeton       12/12/2013      04:13PM
Leon            10/11/2013      05:13PM
Shawn           09/09/2013      04:00PM
Sandy           07/09/2012      09:00AM
Grumpy          18/09/2013      10:00AM

表のように視覚化します。このデータはすべて、多次元配列リストに格納されます。名前はソートして保存する必要があり、日付はソートして保存する必要があり、時刻はソートして保存する必要があります。特定のケースごとに特定の形式のみが受け入れられます。


これは私が試したものですが、get メソッドと set メソッドが extern または abstract としてマークされていないため、本体が必要であることを示すエラーが発生し続けます。

using System; 
using System.Collections;
using System.IO; 
using System.Text; 
class Planner 
{    public string firstName { get; set;}    
     public string lastName { get; set; }    
     public DateTime dateTime { get; set; } 
}
class exe 
{    
     public static void Main(string[] args)    
     {
             List<Planner> t = new List<Planner>();
             StreamReader sr = new StreamReader("@cScheduler.txt")) 
             {
                        string line = string.Empty;
                        while ((line = sr.ReadLine()) != null)
                        {
                                string[] lines = line.Split(' ').ToArray();
                               //add to your list
                               t.Add(new Test() { firstName = lines[0], lastName = lines[1], dateTime = DateTime.ParseExact("MM/dd/yyyy hh:mm:ss tt",  
    lines[2] + lines[3], 
           CultureInfo.InvariantCulture) });
                         } 
              } //Your Ordered list now t = t.OrderBy(x => x.dateTime).ToList<Planner>();   

} }

4

1 に答える 1

1

私は多次元配列が好きではありませんList。代わりに a を使用します。とにかく下に配列があるので、好きなようにできます。;)

List<string> lines = new List<string>();
foreach (var line in MyArray)
  lines.Add(new List<string>()(line.Split(' ')); //feel free to change the .Split as needed
lines = lines.OrderBy(l => l[0]).ThenBy(l => l[1]).ThenBy(l => l[2]).ToList(); //will sort by name, then by date, then by time

そこにlinesは、分離およびソートされたデータが含まれている必要があります。すべてがまだ として扱われているため、ソートはアルファベット順のソートに基づいていることに注意してくださいstring。特定の型を使用する必要がある場合は、Linq クエリでデータを解析できます。

もちろん、そこから、適切なクラスまたは必要なものを介して、データを (実際stringDateTimeおよび場合によってはインスタンスに) 解析できます。TimeSpan

投稿したコードは次のとおりです。提供したサンプルデータで動作するように修正されています。

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;

    class Planner
    {
        public string firstName { get; set; }
        public DateTime dateTime { get; set; }
    }

    class exe
    {
        public static void Main(string[] args)
        {
            List<Planner> t = new List<Planner>();
            using (StreamReader sr = new StreamReader("Scheduler.txt"))
            {
                string line = string.Empty;
                while ((line = sr.ReadLine()) != null)
                {
                    string[] lines = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToArray();
                    var planner = new Planner();
                    planner.firstName = lines[0];
                    var dateStr = String.Format("{0} {1}", lines[1], lines[2]);
                    var date = DateTime.ParseExact(dateStr, "dd/MM/yyyy hh:mmtt", System.Globalization.CultureInfo.InvariantCulture); //note the date format comes second. Also, in your examples days are first, months are second!
                    planner.dateTime = date;
                    t.Add(planner);
                }
            }
            t = t.OrderBy(l => l.firstName).ThenBy(l => l.dateTime).ToList();
        }
    }

lastName例には決して与えられていないのに、なぜクラスに aが必要なのかわかりませんPlanner... O_o

于 2013-07-29T06:48:18.260 に答える