2013-07-19 5 views
3

내가 정의한 열거 이벤트리스트로 변환하는 방법 :CSV 문자열 <Enum>

public enum Events { 
    UNLOCK = 1, 
    LOCK = 2 
} 

뿐만 아니라 CSV 문자열 :

var csv = "1,2"; 

하는 < 이벤트를 나열하는 CSV 문자열을 변환하는 것이 방법이 될 것입니다 무엇을 > C에서?

답변

15
csv.Split(',').Select(s => (Events)Enum.Parse(typeof(Events), s)); 

BTW generic enum class에이 방법 Enum<Events>.Parse(s)을 구문 분석 할 수 및 전체 코드는 다음과 같이 표시됩니다

csv.Split(',').Select(Enum<Events>.Parse) 
+0

고맙습니다. csv.Split (',')을 선택해 주셔서 감사합니다 .Select (S => (T) Enum.Parse (typeof (T), s)). ToList(); – user576700

+0

@ user576700 아이디어가 이미 있습니다 - [일반 에니엄 클래스] (http://stackoverflow.com/a/13248913/470005)를 만들 수 있습니다. 대답 : –

0
csv.Split(',').Select(x => (Events)int.Parse(x)).ToList(); 
+0

여기있는 동안 : 왜, downvoter? –

+0

아마도 귀하의 답변이 목록을 반환하지 않았기 때문일 수 있습니다. 그냥 추측. – Gratzy

+2

@Gratzy 어느 쪽도 가장 upvoted 대답을하지 않습니다 ... –

0

더 자세한 방법 :

var csv = "2,1,1,2,2,1"; 

    List<Events> EventList = new List<Events>(); 

    foreach (string s in csv.Split(',')) 
    { 
     EventList.Add((Events)Enum.Parse(typeof(Events), s, true)); 
    } 
0

전체 CSV 라인의 경우 이벤트가 아니라 정규 표현식을 사용하여 선을 구성 요소로 파싱합니다. 여기서 우리는 혼합 된 CSV 라인을 가지고 정규 표현식은 명명 된 매치 캡처를 사용하여 각 값을 구분할 수 있습니다. 거기에서 우리는 linq을 사용하여 발견 된 각 데이터 행에 대해 새로운 투영법으로 파싱합니다.

var csvLine = "1245,1,2,StackOverFlow"; 
var pattern = @" 
^       # Start at the beginning of each line. 
(?<IDasInteger>[^,]+)  # First one is an ID 
(?:,)      # Match but don't capture the comma 
((?<Events>[^,]+)(?:,)){2} # 2 Events 
(?<Summary>[^\r\n]+)  # Summary text"; 

var resultParsed = Regex.Matches(csvLine, pattern, RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline) 
         .OfType<Match>() 
         .Select (mt => new { 

         ID = int.Parse (mt.Groups["IDasInteger"].ToString()), 
         Event = mt.Groups["Events"].Captures 
                .OfType<Capture>() 
                .Select (cp => (Events)Enum.Parse(typeof(Events), cp.Value))), 
         Summary = mt.Groups["Summary"].ToString() 
        }); 
+0

mt.Groups [ "Events"], 그렇지 않습니까? 마법의 문자열 지옥처럼 보이 : 왜 그냥 많은 이유는 @ lazyberezovsky 꽤 많이 대답했을 때 생각 :) :) – user576700

+0

@ user576700 나는 여러 개의 데이터 열을 가지고있는 CSV 파일을 다뤘다. 명명 된 캡처를 지정함으로써 올바른 데이터가 처리시 올바른 위치에 저장되도록했습니다. 귀하의 상황에 대해서는 아무런 의미가 없지만 획득 한 데이터의 유형과 수량이 다른보다 강력한 상황의 경우 각 행의 정규식이라는 캡처는 매우 좋은 선택 일 수 있습니다. 다른 대답에 관해서, 나는 대부분의 사람들이 다른 시나리오 중에서 선택할 수 있기를 바랍니다. 나도 알아. – OmegaMan

관련 문제