分隔符替换方法 [英] Delimiter Replacement Approach
问题描述
我想创建一个方法,以取代与预期目标使用分隔符(HTML邮件,日志,数据库)。分隔符是不变的,所以我希望能够引用识别的名称映射到字符串值的对象(分号=,htmlLineBreak =< BR />等)。有没有更好的办法来做到这一点比这下面?
公共静态类工具
{
公共字符串ReplaceDelimiter(字符串内容
,分隔符currentDelimiter,分隔符outputDelimiter)
{
返回content.Replace(currentDelimiter.ToString()
,outputDelimiter.ToString());
}
}公共类分隔符
{
公共常量字符串,逗号,;
公共常量字符串分号=;
公共常量字符串冒号=;
公共常量字符串断行=\\ r \\ n;
公共常量字符串htmlLineBreak =< BR />中;
}
编辑以下意见:的结果
一个用例是,当我想记录一个错误到不同的目标,并在邮件发送相同的内容(格式不同)。该日志可能会去一个数据库列(要与分号分隔符键/值)或日志文件(希望分隔符是换行符)。电子邮件是HTML所以希望分隔符以&lt更换; BR />。
下面将从具有几个参数,包括实际的异常一个测井方法的摘录:
的StringBuilder delimitedMessage =新的StringBuilder();delimitedMessage.Append(日期=+ DateTime.Now.ToShortDateString()+;);
delimitedMessage.Append(时间=+ DateTime.Now.ToLongTimeString()+;);
delimitedMessage.Append(源=+ objException.Source.ToString()修剪()+;);
delimitedMessage.Append(方法=+ objException.TargetSite.Name.ToString()+);
delimitedMessage.Append(做错事的方法=+方法名+;);
delimitedMessage.Append(计算机=+ System.Environment.MachineName.ToString()+;);
delimitedMessage.Append(日志消息=+ +的LogMessage;);
delimitedMessage.Append(异常错误=+ objException.Message.ToString()修剪()+;);
delimitedMessage.Append(严重性=+ severity.ToString()+;);
delimitedMessage.Append(堆栈跟踪=+ objException.StackTrace.ToString()修剪()+;);contentToLog = delimitedMessage.ToString();WriteToDb(contentToLog);
WriteToLog(Utilities.ReplaceDelimiter(contentToLog,Delimiter.semicolon,Delimiter.lineBreak));
SendEmail(Utilities.ReplaceDelimiter(contentToLog,Delimiter.semicolon,Delimiter.htmlLineBreak));
-
code
公共类分隔符{
公共静态只读分隔符
HtmlLineBreak =新的分隔符{
VALUE =< BR />中
},
断行=新的分隔符{
VALUE =\\ r \\ n
},
分号=新的分隔符{
值=;
},
科隆=新的分隔符{
值=:
},
逗号=新的分隔符{
值=,
}; 公共重写字符串的ToString(){
返回值;
} 公共字符串值{
得到;
组;
}
} -
测试
VAR T = Utilities.ReplaceDelimiter(123 \\ r \\ n,Delimiter.LineBreak,Delimiter.HtmlLineBreak);
Debug.Print({0},T); -
输出
123 LT; BR />
块引用>
I’d like to create a method to replace delimiters for the intended target use (html email, log, database). The delimiters are constant so I’d like to be able to reference a object that maps recognizable names to string values (semicolon = ";", htmlLineBreak = "<br/>", etc.). Is there a better means to do this than this below?
public static class Utilities
{
public string ReplaceDelimiter(string content
, Delimiter currentDelimiter, Delimiter outputDelimiter)
{
return content.Replace(currentDelimiter.ToString()
, outputDelimiter.ToString());
}
}
public class Delimiter
{
public const string comma = ",";
public const string semicolon = ";";
public const string colon = ":";
public const string lineBreak = "\r\n";
public const string htmlLineBreak = "<br/>";
}
Edited following comments:
A use case would be when I want to log an error to different targets and send the same contents (formatted differently) in an email. The log may go to a database column (want key/value with semicolon delimiter) or log file (want delimiter to be line breaks). The email would be HTML so want the delimiter to be replaced with <br/>.
Below would be an excerpt from a logging method that has a few parameters including the actual Exception:
StringBuilder delimitedMessage = new StringBuilder();
delimitedMessage.Append("Date=" + DateTime.Now.ToShortDateString() + ";");
delimitedMessage.Append("Time=" + DateTime.Now.ToLongTimeString() + ";");
delimitedMessage.Append("Source=" + objException.Source.ToString().Trim() + ";");
delimitedMessage.Append("Method=" + objException.TargetSite.Name.ToString() + ";");
delimitedMessage.Append("Erring Method=" + methodName + ";");
delimitedMessage.Append("Computer=" + System.Environment.MachineName.ToString() + ";");
delimitedMessage.Append("Log Message=" + logMessage + ";");
delimitedMessage.Append("Exception Error=" + objException.Message.ToString().Trim() + ";");
delimitedMessage.Append("Severity=" + severity.ToString() + ";");
delimitedMessage.Append("Stack Trace=" + objException.StackTrace.ToString().Trim() + ";");
contentToLog = delimitedMessage.ToString();
WriteToDb(contentToLog);
WriteToLog(Utilities.ReplaceDelimiter(contentToLog, Delimiter.semicolon, Delimiter.lineBreak));
SendEmail(Utilities.ReplaceDelimiter(contentToLog, Delimiter.semicolon, Delimiter.htmlLineBreak));
Code
public class Delimiter { public static readonly Delimiter HtmlLineBreak=new Delimiter { Value="<br/>" }, LineBreak=new Delimiter { Value="\r\n" }, Semicolon=new Delimiter { Value=";" }, Colon=new Delimiter { Value=":" }, Comma=new Delimiter { Value="," }; public override String ToString() { return Value; } public String Value { get; set; } }
Test
var t=Utilities.ReplaceDelimiter("123\r\n", Delimiter.LineBreak, Delimiter.HtmlLineBreak); Debug.Print("{0}", t);
Output
123<br/>
这篇关于分隔符替换方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!