Windows Phone 72011.11.16 16:14

CSV파일을 윈폰에서 읽을때 첫줄을 Skip 하고 싶을때 사용한다.

csv 첫줄에는 대부분 데이터들의 컬럼값 즉 메뉴 이름같은것이 들어가기때문에

첫줄을 제외한 나머지 데이터를 뽑을때 유용한다. 혹은 마지막데이터를 끊거나

풀 소스

/// <summary>
/// csv 파일을 읽을때 처음 한줄을 Skip 할때 사용
/// foreach문등에서 처음 인덱스와 끝의 인덱스를 감지 한다.
/// </summary>
public static class SkipData
{
    public class SkipFirst<T> : IEnumerable<T>
    {
        private IEnumerable<T> mEnum;

        public SkipFirst(IEnumerable<T> enm)
        {
            mEnum = enm;
        }

        #region IEnumerable<T> Members

        public IEnumerator<T> GetEnumerator()
        {
            IEnumerator<T> iter = mEnum.GetEnumerator();
            if (iter.MoveNext())
            {
                while (iter.MoveNext())
                {
                    yield return iter.Current;
                }
            }
        }

        #endregion IEnumerable<T> Members

        #region IEnumerable Members

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        #endregion IEnumerable Members
    }

    public class SkipLast<T> : IEnumerable<T>
    {
        private IEnumerable<T> mEnum;

        public SkipLast(IEnumerable<T> enm)
        {
            mEnum = enm;
        }

        #region IEnumerable<T> Members

        public IEnumerator<T> GetEnumerator()
        {
            IEnumerator<T> iter = mEnum.GetEnumerator();
            if (iter.MoveNext())
            {
                T curr = iter.Current;
                while (iter.MoveNext())
                {
                    yield return curr;
                    curr = iter.Current;
                }
            }
        }

        #endregion IEnumerable<T> Members

        #region IEnumerable Members

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        #endregion IEnumerable Members
    }

    static public SkipFirst<T> First<T>(IEnumerable<T> enm)
    {
        return new SkipFirst<T>(enm);
    }

    static public SkipLast<T> Last<T>(IEnumerable<T> enm)
    {
        return new SkipLast<T>(enm);
    }
}

참고 : http://honestillusion.com/blogs/blog_0/archive/2007/02/05/c-code-adding-skip-first-to-foreach.aspx

참고로 사용은 이렇게 한다.


foreach (var item in SkipData.First(StationsSplitData))
Posted by 동동(이재동)