Как разделить строку ANSI с неизвестными символами, возвращенными из OpenVMS в C #

1

У меня есть метод, который я написал на С#, который подключается к 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, поэтому проблема теперь в том, как я могу использовать это в своем расколе?

  • 0
    Можете ли вы предоставить код для разделения?
  • 0
    Вы можете опубликовать свой код? Как вы получаете эти строки - как байтовый массив, как строку, или что? И если вы можете определить, где находится символ проблемы, просто получите его номер, например Int32 charCode = (Int32)str[problemCharIndex] или сделайте то же самое в окне просмотра во время отладки (Int32)str[problemCharIndex]
Показать ещё 7 комментариев
Теги:
split
ansi
openvms

1 ответ

0
Лучший ответ

Вы можете попробовать разбивать свою строку через 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 здесь.

  • 0
    Я думаю, что вы должны удалить @ перед строкой шаблона. В противном случае он будет искать буквальную последовательность \033 а не символ с кодом 033 или я здесь ошибаюсь?
  • 0
    @ Thorsten Dittmar В документации @ сохраняется, но точно сказать не могу. Буду признателен, если вы сможете предоставить дополнительную информацию об этом.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню