IT TIP

쉼표로 구분 된 문자열을 어떤 종류의 객체로 구문 분석하는 가장 쉬운 방법은 개별 값에 액세스하기 위해 반복 할 수 있습니까?

itqueen 2020. 12. 13. 11:34
반응형

쉼표로 구분 된 문자열을 어떤 종류의 객체로 구문 분석하는 가장 쉬운 방법은 개별 값에 액세스하기 위해 반복 할 수 있습니까?


개별 값에 쉽게 액세스 할 수 있도록 쉼표로 구분 된 문자열 값 목록을 반복 할 수있는 일종의 개체로 구문 분석하는 가장 쉬운 방법은 무엇입니까?

예제 문자열 : "0, 10, 20, 30, 100, 200"

저는 C #에 익숙하지 않으므로 이와 같은 간단한 질문을 해주셔서 용서해주십시오. 감사.


이것에 문제가 있지만 궁극적으로 가장 간단한 방법은

string s = [yourlongstring];
string[] values = s.Split(',');

쉼표와 항목의 수가 중요하지 않고 '빈'값을 제거하려면 다음을 사용할 수 있습니다.

string[] values = s.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

하지만 한 가지-이것은 문자열 앞뒤에 공백을 유지합니다. 이 문제를 해결하기 위해 약간의 Linq 마법을 사용할 수 있습니다.

string[] values = s.Split(',').Select(sValue => sValue.Trim()).ToArray();

.Net 3.5를 사용하고 있고 소스 파일 상단에 using System.Linq 선언이있는 경우입니다.


   var stringToSplit = "0, 10, 20, 30, 100, 200";

    // To parse your string 
    var elements = test.Split(new[]
    { ',' }, System.StringSplitOptions.RemoveEmptyEntries);

    // To Loop through
    foreach (string items in elements)
    {
       // enjoy
    }

Linq를 사용하면 매우 빠르고 쉬운 방법입니다.

string mystring = "0, 10, 20, 30, 100, 200";

var query = from val in mystring.Split(',')
            select int.Parse(val);
foreach (int num in query)
{
     Console.WriteLine(num);
}

패턴은 숫자가 아닌 모든 문자와 일치합니다. 이것은 당신을 음이 아닌 정수로 제한하지만 귀하의 예에서는 충분합니다.

string input = "0, 10, 20, 30, 100, 200";
Regex.Split(input, @"\D+");

쉼표로 구분 된 값 텍스트 파일로 작업하는 경우 Microsoft.VisualBasic.FileIO.TextFieldParser 클래스 를 사용하는 것이 더 낫다고 생각 합니다.


다음과 같이 열 자체에 쉼표가있는 경우도 있습니다.

"일부 항목", "다른 항목", "또한 하나 더 항목"

이 경우 ","로 분할하면 일부 열이 손상됩니다. 더 쉬운 방법 일 수도 있지만, 방금 내 자신의 메서드를 만들었습니다 (보너스로 쉼표 뒤의 공백을 처리하고 IList를 반환합니다).

private IList<string> GetColumns(string columns)
{
    IList<string> list = new List<string>();

    if (!string.IsNullOrWhiteSpace(columns))
    {
        if (columns[0] != '\"')
        {
            // treat as just one item
            list.Add(columns);
        }
        else
        {
            bool gettingItemName = true;
            bool justChanged = false;
            string itemName = string.Empty;

            for (int index = 1; index < columns.Length; index++)
            {
                justChanged = false;
                if (subIndustries[index] == '\"')
                {
                    gettingItemName = !gettingItemName;
                    justChanged = true;
                }

                if ((gettingItemName == false) &&
                (justChanged == true))
                {
                    list.Add(itemName);
                    itemName = string.Empty;
                    justChanged = false;
                }

                if ((gettingItemName == true) && (justChanged == false))
                {
                    itemName += columns[index];
                }
            }
        }
    }

    return list;
}

참고 URL : https://stackoverflow.com/questions/2235683/easiest-way-to-parse-a-comma-delimited-string-to-some-kind-of-object-i-can-loop

반응형