У меня есть метод, который я написал на С#, который подключается к OpenVMS, запускает команду и затем возвращает результат.
Одна из процедур DCL, которые она запускает, возвращает "форму" в виде строки, которая содержит в себе все виды кодировки ANSI.
То, что я хочу сделать, - разделить возвращаемую строку на массив на основе символа escape ANSI в качестве разделителя, чтобы потом я мог сортировать его и позже создавать.
Проблема, с которой я сталкиваюсь, заключается в том, что escape-символ не похож на его распознавание. Когда я проверяю строку в визуальной студии, я вижу стандартное форматирование ANSI со стрелкой, указывающей налево, которая выглядит так: ← между каждой записью. Это символ побега.
Если я вставляю ту же строку в notepad++, она отображается как ESC.
Я попытался сделать разделение на строку с \033, являющимся разделителем, но это не сработало, я также попытался вставить символ ESC в переменную, но он просто вставляет пустое пространство.
Поэтому мне интересно, как узнать, какой код символов используется этим escape-символом, чтобы я мог использовать его в своем расколе.
Id опубликовать снимок экрана, но я не имею репутации, чтобы сделать это, по-видимому.
edit: это то, что возвращается:
[02;27HDIVIDEND SETUP 11:25 Mon, 21 Jul 2014[04;05HCurrent attach point : VOD_TIM[07;05H Code Description[07;60HDate Run
Он не отображается в качестве символа в StackOverflow, но если вы представляете, что символ находится напротив каждого из сегментов, начиная с [
Edit 2: OKay se, мы установили, что код int char равен 27, поэтому проблема теперь в том, как я могу использовать это в своем расколе?
Вы можете попробовать разбивать свою строку через Regex
, что-то вроде этого:
string input = YOUR_STRING_HERE;
string pattern = @"\033";
string[] substrings = Regex.Split(input, pattern);
foreach (string match in substrings)
{
Console.WriteLine("'{0}'", match);
}
Обновить:
Вы можете использовать \e
символ для ESC
символа в Regex
в.Net, увидеть полный список экранирующих символов в Regex
здесь.
@
перед строкой шаблона. В противном случае он будет искать буквальную последовательность \033
а не символ с кодом 033
или я здесь ошибаюсь?
@
сохраняется, но точно сказать не могу. Буду признателен, если вы сможете предоставить дополнительную информацию об этом.
Int32 charCode = (Int32)str[problemCharIndex]
или сделайте то же самое в окне просмотра во время отладки(Int32)str[problemCharIndex]