2012-04-19 3 views
0

내부 값에 따라 데이터베이스의 값으로 대체되는 자리 표시자를 포함하는 템플릿 문자열을 만들려고합니다. 즉, 템플릿은 다음과 같을 것이다 :문자열의 값을 내부 값에 따라 바꿉니다.

No: {Job_Number} 
Customer: {Cust_Name} 
Action: {Action} 

템플릿은 모든 열 값이 대괄호 안에 존재로, 아무것도 변경 될 수 있습니다 .. 내가 얻을 수있는 우아한 방법을 알아낼 수 없습니다 내부 값을 대체하고 값으로 바꿉니다 ...

답변

2

것은이 이것에 대한 내 솔루션되었습니다.

은이 같은 것을 할 수있는 형식 문자열을 보내기

// this is a MatchEvaluater for a regex replace 
string me_setFormatValue(Match m){ 
    // this is the key for the value you want to pull from the database 
    // Job_Number, etc... 
    string key = m.Groups[1].Value; 

    return SomeFunctionToGetValueFromKey(key); 
} 


void testMethod(){ 
    string format_string = @"No: {Job_Number} 
Customer: {Cust_Name} 
Action: {Action}"; 

    string formatted = Regex.Replace(@"\{([a-zA-Z_-]+?)\}", format_string, me_SetFormatValue); 
} 
+0

그것은 작동을하지만, 그 수치는 효율성이 많다는 같은 일을 위해 정규식을 사용합니다. – SimpleVar

+0

나는 치명적인 루프를 겪지 않는 한 퍼포먼스 히트가 무시할 수있을 것이라고 생각한다. – climbage

+0

나는 이론을 좋아한다. 그러나 정규식 doesnt는 \ {unregoised 탈출 기호이다. – michael

0

구조체 또는 클래스를 나타내며 ToString을 재정의합니다. 문자열을 형식화하는 논리적 클래스가 이미 있습니다.

public class StringHolder 
{ 
    public int No; 
    public string CustomerName; 
    public string Action; 

    public override string ToString() 
    { 
     return string.Format("No: {1}{0}Customer: {2}{0}Action: {3}", 
          Environment.NewLine, 
          this.No, 
          this.CustomerName, 
          this.Action); 
    } 
} 

그런 다음 등록 정보를 변경하고 instance.ToString을 다시 대상 값으로 설정하여 업데이트 할 값을 지정하십시오.

public class StringHolder 
{ 
    public readonly Dictionary<string, string> Values = new Dictionary<string, string>(); 

    public override string ToString() 
    { 
     return this.ToString(Environment.NewLine); 
    } 

    public string ToString(string separator) 
    { 
     return string.Join(separator, this.Values.Select(kvp => string.Format("{0}: {1}", kvp.Key, kvp.Value))); 
    } 

    public string this[string key] 
    { 
     get { return this.Values[key]; } 
     set { this.Values[key] = value; } 
    } 
} 

을 그리고 사용법은 다음과 같습니다 :

당신은 너무 같은 StringHolder 등 클래스보다 일반적인 만들 수

var sh = new StringHolder(); 

sh["No"] = jobNum; 
sh["Customer"] = custName; 
sh["Action"] = action; 

var s = sh.ToString(); 
관련 문제