有人能解释一下这个字符串的顺序吗.加入连接

本文关键字:顺序 字符串 连接 能解释 一下 | 更新日期: 2023-09-27 18:11:58

输入文件内容:

Time,MW
01/01/2014 1:00:00 AM,2617
01/01/2014 2:00:00 AM,2544
01/01/2014 3:00:00 AM,2458
01/01/2014 4:00:00 AM,2395
01/01/2014 5:00:00 AM,2349
01/01/2014 6:00:00 AM,2375
01/01/2014 7:00:00 AM,2359
01/01/2014 8:00:00 AM,2418
...

下面是期望的输出:其中Weekday = 1, Weekend = 0, Winter = 1, Mid = 2, Summer = 3

Time,MW,Hour,Weekday,Season
01/01/2014 1:00:00 AM,2617,1,1,1
01/01/2014 2:00:00 AM,2544,2,1,1
01/01/2014 3:00:00 AM,2458,3,1,1
01/01/2014 4:00:00 AM,2395,4,1,1
01/01/2014 5:00:00 AM,2349,5,1,1
01/01/2014 6:00:00 AM,2375,6,1,1
01/01/2014 7:00:00 AM,2359,7,1,1
01/01/2014 8:00:00 AM,2418,8,1,1
...

代码如下:

var inLines = File.ReadAllText(IN_CSV).Split(''n');
var outLines = new List<string>();
outLines.Add(OUT_CSV_HEADER);
foreach (var line in inLines)
{
    if (line.Contains("Time,MW")) continue;
    List<string> ocl = BuildOutCsvLine(line);
    var oclFinal = "";
    ocl.ForEach(o => {
        System.Console.WriteLine(o);
        oclFinal = string.Join(",", oclFinal, o);
    });
    System.Console.WriteLine(oclFinal);
    break;
    //outLines.Add(ocl);
}
private static List<string> BuildOutCsvLine(string inCsvLine) {
    var inCsvData = inCsvLine.Split(',');
    var timestamp = DateTime.ParseExact(inCsvData[0], "dd/MM/yyyy h:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture);
    var season = seasons.GetSeason(timestamp);
    var tod = timestamp.Hour.ToString();
    var wd = ((int)timestamp.GetWeekDayType()).ToString();
    var ssn = ((int)season.Id).ToString();
    return new List<string> { inCsvLine, tod, wd, ssn };
}

输出如下:

01/01/2014 1:00:00 AM,2617
1
1
1
,1,1,1/2014 1:00:00 AM,2617

我还尝试StringBuilder附加所有元素并创建CSV字符串,但产生相同的结果。

是否有格式问题(如CultureInfo.InvariantCulture等)。我必须使用)?我试过InvariantCulture,但结果相同。

我怀疑。net框架,我需要应用一些补丁吗?

有人能解释一下这个字符串的顺序吗.加入连接

string.Join()的顺序与您提供的元素的顺序相同,. net内部不会改变顺序

试试这段代码,但我无法完全测试它,因为您没有提供完整的代码。特别是季节对我来说是没有定义的。

对不起,更新。错误的代码。

var inLines = File.ReadAllText(IN_CSV).Split(''n');
var outLines = new List<string>();
outLines.Add(OUT_CSV_HEADER);
foreach (var line in inLines)
{
    if (line.Contains("Time,MW")) continue;
    List<string> ocl = BuildOutCsvLine(line);
    var oclFinal = "";
    ocl.ForEach(o => {
        oclFinal = string.Join(",", oclFinal, o);
    });
    System.Console.WriteLine(oclFinal);
}
    private static List<string> BuildOutCsvLine(string inCsvLine)
    {
        var clearR = inCsvLine.Replace("'r", "");
        var clearN = clearR.Replace("'n", "");
        var inCsvData = clearN.Split(',');
        var timestamp = DateTime.ParseExact(inCsvData[0], "dd/MM/yyyy h:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture);
        var season = seasons.GetSeason(timestamp);
        var tod = timestamp.Hour.ToString();
        var wd = ((int)timestamp.GetWeekDayType()).ToString();
        var ssn = ((int)season.Id).ToString();
        return new List<string> { clearN, tod, wd, ssn };
    }

您正在尝试的是,在oclFinal中连接ocl列表元素

List<string> ocl = BuildOutCsvLine(line);
var oclFinal = "";
ocl.ForEach(o => {
    System.Console.WriteLine(o);
    oclFinal = string.Join(",", oclFinal, o);
});

你可以通过

List<string> ocl = BuildOutCsvLine(line);
var oclFinal = "";
oclFinal=string.Join(",",ocl);