2010-04-25 2 views
1

'name1 {value1, value2}; 같은 문자열에서 가져 오는 방법; name2 {value3}; ... 이름 N {값 12, 값 N} '문자열을 ArrayCollection으로 변환 (C#, 아래 문자열 참조)

배열 또는 이러한 형식의 배열 : Array = {string, int}; {string, int}; {string, int}; 이 같은

: C#에서

{ 
{ name1 ; value1} 
{ name1 ; value2} 
{ name2 ; value3} 
... 
{ nameN ; valueN} 
} 

(.NET)?

+0

구조가 재귀적일 수 있습니까? 정확성을 검증하고 잘못된 입력을 처리해야하는지 아니면 제대로 입력되지 않았다고 가정 할 수 있습니까? 문자열에 세미콜론, 중괄호 또는 이스케이프 된 따옴표 등이 포함될 수 있습니까? –

+0

아니오 - 잘못된 입력이 가능하지 않습니다. 유효성 검사가 필요 없습니다. 당신은 그것이 잘 형성 될 것이라고 추정 할 수 있습니다. 문자열은 이스케이프됩니다 (예 : 브라우저가 이스케이프 됨). – Rella

+1

.Net의 버전은 무엇입니까? – SLaks

답변

1

당신은 문서가 항상 잘 형성 될 것이라는 점을 가정 할 수있는 경우 :

List<KeyValuePair<string, int>> results = new List<KeyValuePair<string, int>>(); 
foreach (string line in File.ReadAllLines("input.txt")) 
{ 
    Match match = Regex.Match(line, @"^\s*{\s*(.*?)\s*;\s*(\d+)\s*}\s*$"); 
    if (match.Success) 
    { 
     string s = match.Groups[1].Value; 
     int i = int.Parse(match.Groups[2].Value); 
     results.Add(new KeyValuePair<string,int>(s,i)); 
    } 
} 

foreach (var kvp in results) 
    Console.WriteLine("{0} ; {1}", kvp.Key, kvp.Value); 

결과 :

name1 ; 1 
name1 ; 2 
name2 ; 3 
nameN ; 23 

하면 NAME1, NAME2, ..., nameN이 고유 당신이 돈 ' 순서에 신경 쓰지 않는다면 List 대신 Dictionary을 사용하는 것이 좋습니다. 목록 대신 배열을 원한다면 (아마 그렇지 않을 것입니다) ToArray()을 사용할 수 있습니다.

+0

'List > results = new List >();을 대체 할 수 있습니까? 'to'Dictionary > 결과 = 새 사전 >(); '? – Rella

+0

@Ole Jak :'Dictionary '을 사용하고 또한'result.Add (s, i);'에 행 추가를 변경해야합니다. –