【发布时间】:2020-12-18 03:07:28
【问题描述】:
C# 和 Linq 的新手。我已经尝试过搜索,但我似乎无法到达任何地方。
我正在尝试格式化文件中的最后一列。这是一个货币值,我想将其格式化为显示 2 位小数。
这个功能是拆分数据和排序文件。我认为将文件重新组合在一起时应该进行格式化,但我不确定如何实现。
static void SortData(string directory, string outputDirectory)
{
var d = new DirectoryInfo(directory);
Console.WriteLine("Sorting Files...");
foreach (FileInfo fi in d.GetFiles())
{
// Read file
var fileContents = File.ReadAllText(directory+ fi.Name);
//split on carriage returns and line feeds, remove empty entries.
var lines = fileContents.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
//Split each line on Tab
var splitLines = lines.Select(l => l.Split(new[] { '\t' }));
//splitLines is now an array of arrays. Each splitLine entry is a line, and each entry of each splitline element is
//a single field... so we should be able to sort how we want, e.g. by first field then by second field:
var sortedLines = splitLines.OrderBy(sl => sl[0]).ThenBy(sl => sl[1]).ThenBy(sl => sl[2]).ThenBy(sl => sl[3]).ThenBy(sl => sl[4]).ThenBy(sl => sl[5]).ThenBy(sl => sl[6]);
//put back together as TSV - put tabs back.
var linesWithTabsAgain = sortedLines.Select(sl => string.Join("\t", sl));
//put carriage returns/linefeeds back
var linesWithCRLF = string.Join("\r\n", linesWithTabsAgain);
File.WriteAllText(outputDirectory + fi.Name, linesWithCRLF);
}
Console.WriteLine("Sorting Complete");
}
【问题讨论】:
-
如果要将所有数字格式化为“2个小数位”,最好先
decimal.Parse(value)在排序前得到一个小数[][],然后用.ToString("F2")格式化在文件写入之前。