分隔符替换方法 [英] Delimiter Replacement Approach

查看:155
本文介绍了分隔符替换方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个方法,以取代与预期目标使用分隔符(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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆