C#에서 단일 문자열 명령줄 매개변수를 효율적으로 분할하는 방법
C#에서는 실행 파일에 전달된 명령줄 인수 배열을 가져오는 것이 중요한 작업입니다. 매개변수가 단일 문자열로 제공되는 경우 C#이 명령줄에서 직접 매개변수를 지정할 때 매개변수를 처리하는 방법과 유사하게 개별 매개변수를 추출하는 방법이 필요합니다. 이 문서에서는 이를 달성하기 위한 사용자 정의 세분화 방법을 설명합니다.
C#에는 특정 조건에 따라 문자열을 분할하는 표준 함수가 없으므로 자체 확장 메서드를 정의했습니다. Split
:
public static IEnumerable<string> Split(this string str, Func<char, bool> controller)
이 메서드는 문자열을 분할할 시기를 결정하는 함수를 인수로 받아들입니다. 우리의 경우에는 람다 표현식을 사용합니다:
Func<char, bool> controller = c => { if (c == '\"') inQuotes = !inQuotes; return !inQuotes && c == ' '; };
이 기능은 큰따옴표와 공백을 확인하여 분할 지점을 결정합니다. 큰따옴표는 공백을 포함할 수 있으므로 특별한 처리가 필요한 인수를 묶습니다.
문자열을 분할한 후 TrimMatchingQuotes
확장 메서드를 사용하여 결과 매개변수를 추가로 처리하고 선행 또는 후행 큰따옴표를 제거합니다.
public static string TrimMatchingQuotes(this string input, char quote)
이러한 방법을 결합하여 명령줄 인수가 포함된 문자열을 받아들이고 문자열 배열을 반환하는 SplitCommandLine
함수를 만듭니다.
public static IEnumerable<string> SplitCommandLine(string commandLine) { return commandLine.Split(controller) .Select(arg => arg.Trim(' ').TrimMatchingQuotes('\"')) .Where(arg => !string.IsNullOrEmpty(arg)); }
이 함수는 지정된 기준에 따라 문자열을 분할하고, 공백을 자르고, 주변의 큰따옴표를 제거합니다. 결과 문자열 배열은 C#에서 생성된 명령줄 인수를 정확하게 나타냅니다.
기능을 시연하기 위해 몇 가지 테스트 사례를 제공합니다.
Test(@"/src:""C:\tmp\Some Folder\Sub Folder"" /users:""[email protected]"" tasks:""SomeTask,Some Other Task"" -someParam", @"/src:""C:\tmp\Some Folder\Sub Folder""", @"/users:""[email protected]""", @"tasks:""SomeTask,Some Other Task""", @"-someParam");
이러한 사용자 정의 분할 기능을 사용하면 C#의 단일 문자열에서 명령줄 인수를 효과적으로 추출하여 필요에 따라 사용할 수 있습니다.
위 내용은 C#의 단일 문자열에서 명령줄 매개 변수를 효과적으로 분할하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!