2013-05-12 6 views
1

이 결과를 읽는 가장 좋은 방법은 무엇입니까 string? 만 문자열이 웹 서비스 나 사용자 mystring.split(' ')문자열에서 값 추출

"RESULT: FAILED 
RESULT_CODE: 944 
RRN: 313434415392 
APPROVAL_CODE: 244447 
CARD_NUMBER: 4***********3412"; 

에서 반환, 구문 분석 할 필요가 있지만, 내가 생각하는 좋은 생각이 아니다.

+0

공간을 포함하여 전체 문자열을 읽지 마시고 공백을 제거한 다음 새 문자열을 저장하십시오. –

+0

특수 문자가 있습니까? 그렇지 않다면 정규 표현식이 가장 큰 불필요한 반복을 없애주는 훌륭한 옵션이 될 수 있습니다. – clamchoda

답변

5

당신은 사전 구축 LINQ를 사용할 수 있습니다 키에 의해 결과를

string s = 
    @"RESULT: FAILED 
    RESULT_CODE: 944 
    RRN: 313434415392 
    APPROVAL_CODE: 244447 
    CARD_NUMBER: 4***********3412"; 

IDictionary<string, string> result = s 
    .Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries) 
    .Select(line => line.Split(':')) 
    .ToDictionary(x => x[0].Trim(), x => x[1].Trim()); 

을 다음 쿼리 :

Console.WriteLine(result["RRN"]); 

당신에게 313434415392을 줄 것입니다.

또는 모든 키와 값을 간단하게 루프를 얻고 싶었다 경우 : 당신은 루프를 방지하려는 경우

foreach (var item in result) 
{ 
    Console.WriteLine("key: {0}, value: {1}", item.Key, item.Value); 
} 
+2

1 회선 LINQ 코드 – Damith

0

엔티티 (클래스)를 만들고 인스턴스를 반환하십시오.

public class ReturnValues 
{ 
    public string Result {get; set;} 
    public string return_Code 
    // Other properties 
} 
+1

무엇을 의미합니까? 이 값은 웹 서비스에서 문자열로 반환됩니다 ... – levi

+2

@levi : 질문했을 것입니다. 질문에 웹 서비스 질문이라고 언급하지 않습니다. –

+2

당신이 웹 서비스 중 하나를 언급하기 전에 당신의 대답은 말이되지 않습니다. –

1

split ("\ n")을 사용할 수 있습니까?

+2

그 질문이나 답변입니까? – Mike

+1

그것은 모두입니다; split ('\ n') – Virus

2
string text = @"RESULT: FAILED 
RESULT_CODE: 944 
RRN: 313434415392 
APPROVAL_CODE: 244447 
CARD_NUMBER: 4***********3412"; 

using (StringReader reader = new StringReader(text)) 
{ 
    string line; 
    while ((line = reader.ReadLine()) != null) 
    { 
     var values = line.Split(':'); 
     if (values.Length > 1 && values[0].Trim() =="RESULT") 
     { 
      var found = values[1].Trim(); // this is the value you want 
      break; 
     } 
    } 
} 
+0

분할이 좋은 방법입니다. – levi

+0

LineReader 클래스를 찾을 수 없습니다. – levi

+2

@levi 링크를 클릭하십시오. 수업이 응답 중입니다. – christopher

1
var regex = new Regex(@"(RESULT:)[a-zA-Z0-9\t .]+"); 
string text = @"RESULT: FAILED 
RESULT_CODE: 944 
RRN: 313434415392 
APPROVAL_CODE: 244447 
CARD_NUMBER: 4***********3412"; 

MatchCollection matches = regex.Matches(text); 

foreach (Match m in matches) 
{ 
    string values = m.Value; 
} 

나는 아마도 데이터 집합이 매우 큰, 잘 모르겠어요합니다. 여기서 제공되는 솔루션의 대안은 정규 표현식과 일치하는 것을 찾는 것입니다. 나는 당신이 당신의 데이터 세트와 일치하는 완벽한 정규식을 생각해 낼 수있을 것이라고 확신하지만, 글자와 숫자가 포함 된 줄 끝과 결과가 일치해야한다. 비록 특수 문자가 필요하다면 특수 문자를 수정해야한다고 생각한다. 귀하의 데이터 세트에 포함되어 있습니다. 아래는 내가 의미하는 바를 알려줄 것입니다.

+0

캡처 그룹이 잘못된 부분에 있습니다. 값 대신 레이블을 캡처 중입니다. 또한, .Matches() 대신에 .Match()를 사용하십시오; 첫 번째 경기 만 반환합니다. –