프로그램 이 CSV 파일 을 읽 을 때 파일 내용 이 규범 에 맞지 않 는 문 제 를 해결 합 니 다.

2073 단어
원래 저 는 포럼 에서 질문 을 했 습 니 다. 문 제 는 '이런 유형의 문자열 을 문자열 배열 로 나 눌 수 있 는 방법 이 있 습 니까?' 라 는 것 을 알 수 있 습 니 다. 정규 표현 식 으로 처리 할 방법 이 있 는 지 보고 싶 었 습 니 다. 그러나 저 는 텍스트 조작 에 익숙 하지 않 아서 스스로 방법 을 썼 습 니 다. 제 가 제기 한 질문 에 어떻게 대답 하 는 방법 을 찾 지 못 했 기 때 문 입 니 다.그래서 제 블 로그 에 업 데 이 트 를 할 수 밖 에 없 었 습 니 다. 아래 에 제 가 코드 를 붙 여 놓 았 습 니 다. 이 문 제 는 주로 프로그램 을 통 해 CSV 파일 을 읽 을 때 파일 내용 이 규범 에 맞지 않 는 상황 을 해결 하고 자 하 는 것 입 니 다. 잠시 테스트 를 해도 되 지만 BUG 가 있 을 지 다른 친구 들 도 의견 을 많이 제시 해 주 십시오.주석 을 나 는 쓰 지 않 았 는데, 절 차 는 비교적 간단 하 다.
public static string[] Split(string text)
{
    //string text = "\"b\",\"a\",\"b\",\"c\",1,2,3,\"xxx,yyy\",\"\",1,\"\",,,\"\",\"\",4,,,,,\"99,9\"";
    List stringList = new List();
    string strings = "";
    try
    {
        for (int strLocation = 0; strLocation < text.Length; strLocation++)
        {
            string singleChar = text.Substring(strLocation, 1);
            
            switch (singleChar)
            {
                case ",":
                    stringList.Add(strings);
                    strings = "";
                    break;
                case "\"":
                    int markLocation = strLocation + 1;
                    for (strLocation = markLocation; strLocation < text.Length; strLocation++)
                    {
                        if ("\"".Equals(text.Substring(strLocation, 1)))
                        {
                            strings = text.Substring(markLocation, strLocation - markLocation);
                            break;
                        }
                    }
                    break;
                default:
                    strings += singleChar;
                    break;
            }

            if (strLocation == text.Length - 1)
                stringList.Add(strings);
        }
    }
    catch (Exception e)
    {
        throw e;
    }

    return stringList.ToArray();
}

좋은 웹페이지 즐겨찾기