Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 将字符串内容排序为Datetime c_File_Sorting_C# 4.0_Datetime_Stream - Fatal编程技术网

File 将字符串内容排序为Datetime c

File 将字符串内容排序为Datetime c,file,sorting,c#-4.0,datetime,stream,File,Sorting,C# 4.0,Datetime,Stream,我有一个文件,其中包含数据的字符串行,日期和时间值为字符串。 每一行都是一条固定宽度的线 我想按每行中的日期和时间对文件行进行排序。 然后,将排序后的行写回文件。 我试着思考和寻找如何实现这一点,但这次我不知所措。 希望你们中的一些人能在这个问题上帮助我 以下是我的行的外观示例: 日期|开始时间|结束时间|数据。。。。。 2014年7月20日08:00 09:00 0001 0 F T 2014年7月21日08:00 10:00 0001 0 F T 2014年7月27日07:00 08:30

我有一个文件,其中包含数据的字符串行,日期和时间值为字符串。 每一行都是一条固定宽度的线

我想按每行中的日期和时间对文件行进行排序。 然后,将排序后的行写回文件。 我试着思考和寻找如何实现这一点,但这次我不知所措。 希望你们中的一些人能在这个问题上帮助我

以下是我的行的外观示例:

日期|开始时间|结束时间|数据。。。。。 2014年7月20日08:00 09:00 0001 0 F T 2014年7月21日08:00 10:00 0001 0 F T 2014年7月27日07:00 08:30 0001 0 F T 2015年4月1日13:00 14:00 0001 0 F T 2015年5月1日13:00 14:00 0003 0 F T 2014年8月3日20:00 22:00 0005 0 F T
2014年8月4日23:00 23:59 0200 F T

我要做的是创建一个小类,我们称之为DataLine,它代表您的文件。此类至少将包含日期的DateTime和存储行本身的字符串。然后我将创建一个解析现有文件的方法,每行创建一个DataLine对象,并将所有这些新对象添加到列表中。通用列表对象可以轻松排序。最后,使用foreach循环列表,并将所有内容写入新文件

下面是我的示例,使用您提供的数据集进行了测试


我会将整个文件中的每一行分割成一个二维数组,然后对日期进行比较,在需要时交换元素

[20/07/2014,08:00,09:000001,0,F,T] [2014年7月21日,08:00,10:000001,0,F,T]

//降序

如果[i][j]<[i+1][j] {

互换[i],[i+1] }


这只是一个开始的想法

如果要从文件中读取行,请收集字符串类型列表中的所有行,并按如下方式对该列表进行排序:

List<string> myList;
//add the rows in the list
myList = myList.OrderBy(p => p.Substring(0)).ToList();

然后将排序后的myList写回文件

您还可以使用数组保存集合

但这将按字母顺序而不是日期对行进行排序

要按结束时间排序,如果日期和开始时间相同,则可以尝试以下方法:

现在,已排序的文本行将位于myData中

对于日期区域设置:


DateTime.ParseExact或DateTime.TryParseExact可用于获取所需的确切格式dd/MM/yyyy、MM/dd/yyyy等。

这是个好主意,但示例中的日期格式不可排序。他将得到的文件不是按日期排序,而是按文本排序。这是不一样的。在这里我们可以做一件事,按空间分割所有行,并添加每个元素DateConvert to date,starttimeconvert to time,endtime,列表中的etc,则列表可以按如下顺序排序required@AmanVirdi这在一个附加条件下非常有效:我没有转换p.Substring0,而是转换了.ToDateTimep.Substring0,16,效果非常好。一个问题:有没有办法在两行的日期和开始时间值相同的情况下设置二级排序?我还有结束时间,我想对行进行排序,其中那些具有相同Substring0,16值的行也将按照行中的结束时间进行排序。好的,这很好。是的,您可以通过创建一个属性类来实现这一点
myList = myList.OrderBy(p => p.Substring(0)).ToList();
myList.Sort();
    string[] dataRows = {"20/07/2014 08:00 09:00 0001 0 F T", 
    "21/07/2014 08:00 10:00 0001 0 F T",
    "27/07/2014 07:00 08:30 0001 0 F T",
    "01/04/2015 13:00 14:00 0001 0 F T",
    "01/05/2015 13:00 14:00 0003 0 F T",
    "03/08/2014 20:00 22:00 0005 0 F T",
    "04/08/2014 23:00 23:59 0200 0 F T"};

    List<RowModel> myList = new List<RowModel>();

    foreach (string line in dataRows)
    {
        var row = line.Split(' ');
        string startDateTime = row[0] + " " + row[1];
        string endDateTime = row[0] + " " + row[2];
        myList.Add(new RowModel { StarDatetTime =  Convert.ToDateTime(startDateTime), EndDateTime = Convert.ToDateTime(endDateTime), Data = line });
    }

    var myData = myList.OrderBy(x => x.StarDatetTime).ThenBy(x =>x.EndDateTime).Select(x=>x.Data).ToList();
public class RowModel
{
    public DateTime StarDatetTime { get; set; }
    public DateTime EndDateTime { get; set; }
    public string Data { get; set; }
}