有一个LINQ结果,需要用纯文本格式化,以便通过电子邮件发送。
例如,每条记录包含“ProductName”,“SalesAmount”,“Taxes” 对于不同的记录,产品名称可以是不同长度的字符串。
需要将此类记录的列表格式化为明文表。使用“----------”作为水平线和“|”作为垂直线。
由于您不知道产品名称的最大尺寸,因此您不知道垂直线的大小(以字符为单位)。假设需要找到最大产品名称长度,并根据它计算所需“ - ”字符的数量。但有什么可以自动格式化吗?
假设字体是单倍间距的。
最好的方法是什么?
感谢。
答案 0 :(得分:3)
您可能正在寻找的是格式字符串中的对齐参数。即:
string s = String.Format("{0,-20}{1,-20}{2,-20})", "one", "two", "three");
将呈现三个相等的列,左对齐(当您删除减号时右对齐),每个20个字符。使用此选项可以使用您的数据在文本中创建漂亮的列。
编辑后:
// loop through your data and find the largest common size (note: you can use LINQ)
int maxCol1 = 0;
int maxCol2 = 0;
foreach(item in yourData)
{
maxCol1 = item.Col1 > maxCol1 ? item.Col1 : maxCol1;
maxCol2 = item.Col2 > maxCol2 ? item.Col2 : maxCol2;
}
// create formatting strings, add all sizes:
string line = new String('-', 2 + maxCol1 + maxCol2 + nr of columns ...);
string formatString = String.Format(
"|{{0,-{0}}}|{{1,-{1}}}|{{2,-{2}}}|)",
maxCol1,maxCol2 ...);
// create your text-only mail neatly formatted
yourStringWriter.WriteLine(line);
foreach(item in yourData)
{
yourStringWriter.WriteLine(String.Format(formatString, item.Col1, item.Col2);
yourStringWriter.WriteLine(line);
}
以上将输出以下内容(将臭名昭着的Col1,Col2替换为您的属性,如姓名,地址等):
---------------------- |one |two |three | |four |five |six | |seven |eight |nine | ----------------------
答案 1 :(得分:0)
在纯文本邮件中没有一种可靠的方法(如果你正在寻找一个漂亮的方桌),因为你无法假设电子邮件客户端使用标签的方式,你可以'因为你不知道人们将使用什么字体,所以请用空格排列。