쉼표로 구분 된 문자열 목록을 루프 할 수있는 일종의 개체로 구문 분석하여 개별 값에 쉽게 액세스 할 수있는 가장 쉬운 방법은 무엇입니까?쉼표로 구분 된 문자열을 특정 유형의 개체로 구문 분석하는 가장 쉬운 방법은 개별 값에 액세스하기 위해 반복 할 수 있습니까?
예를 들어 문자열 : "0, 10, 20, 30, 100, 200"
는 전 C#을 조금 새로운, 그래서이 같은 간단한 질문을 용서해. 감사.
쉼표로 구분 된 문자열 목록을 루프 할 수있는 일종의 개체로 구문 분석하여 개별 값에 쉽게 액세스 할 수있는 가장 쉬운 방법은 무엇입니까?쉼표로 구분 된 문자열을 특정 유형의 개체로 구문 분석하는 가장 쉬운 방법은 개별 값에 액세스하기 위해 반복 할 수 있습니까?
예를 들어 문자열 : "0, 10, 20, 30, 100, 200"
는 전 C#을 조금 새로운, 그래서이 같은 간단한 질문을 용서해. 감사.
이와 개는있다 - 그러나 궁극적으로 가장 간단한 방법은 뉴 경우
string s = [yourlongstring];
string[] values = s.Split(',');
을 사용하는 것입니다 쉼표 항목의 mber는 중요하지 않습니다, 당신은 당신이 생각
string[] values = s.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
한 가지를 사용할 수있는 '빈'값을 제거하려면 -이 전에와 문자열 후 공백을 유지합니다. 당신은 닷넷 3.5을 사용하는 경우의
string[] values = s.Split(',').Select(sValue => sValue.Trim()).ToArray();
를 당신은 소스 파일의 상단에 System.Linq 사용 선언을 : 당신은 그것을 해결하기 위해 Linq에 마법의 비트를 사용할 수 있습니다.
공백에 대처할 수있는 정규식 솔루션도 사용할 수 있습니다. 그러나 이것이 가장 직접적인 접근 방법입니다. @ Andras의 덧글에 –
가 추가되었습니다.나는 또한 정규 표현식을 사용하여 각 값이 숫자이고 다른 것들을 제거하도록 할 것이다. 무늬? ' "(?
필자는 이들 중 일부를 List
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);
}
try'int.Parse (val.Trim()) –
Linq를 사용하는 데 약간의 과잉 사용이되지는 않습니까? .split()는 루프 할 수있는 배열을 반환합니다. Linq의 복잡성을 추가하고 있습니다. 무엇보다도 가독성이 떨어집니다. –
하지만 무슨 일이 일어나고 있는지 이해하기 쉽고 컴파일러는 lambda-querys를 사용하는 것처럼 표현식 트리와 같은 방식으로 쿼리를 변환합니다. – martin
패턴이 모든 비 숫자 문자와 일치합니다. 이렇게하면 음수가 아닌 정수로 제한되지만, 예를 들어 충분하지 않을 수도 있습니다.
string input = "0, 10, 20, 30, 100, 200";
Regex.Split(input, @"\D+");
나는 당신이 쉼표로 구분 된 값 텍스트 파일로 작업하는 경우 Microsoft.VisualBasic.FileIO.TextFieldParser Class 을 사용하는 것이 더 좋다고 생각한다.
당신이 도와 줘서 고마워! – David
때로는 열이 같은 자체 내에서 쉼표해야합니다 :
"일부 항목", "또 다른 항목을" "또, 또 하나 개의 항목"이러한 경우
에 분할 "," 일부 열이 깨질 수 있습니다. 어쩌면 더 쉬운 방법 일 수도 있지만 보너스로 쉼표 뒤에 공백을 처리하고 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;
}
re : 내 대답 - 실제로이 값을 숫자로 처리하는 경우 관심이 있다면 결함 허용 방식으로 파싱하기위한 추가 전략이 있습니다. 나는 그것들을 추가하기 시작했다. 그러나 실제로 그것이 너무 많은 정보라고 느꼈다. –
실제로 네, #s가 필요 했었지만 지금 구현했습니다. 코드를 수행 한 후 쉽습니다. 모든 것이 잘 작동합니다. 감사! – ycomp