有人能解释一下这个字符串的顺序吗.加入连接
本文关键字:顺序 字符串 连接 能解释 一下 | 更新日期: 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);