【问题标题】:How to Split an ANSI string with unknown characters returned from OpenVMS in C#如何使用 C# 中从 OpenVMS 返回的未知字符拆分 ANSI 字符串
【发布时间】:2014-07-21 12:41:31
【问题描述】:

我有一个用 C# 编写的连接到 OpenVMS、运行命令然后返回输出的方法。

它运行的一个 DCL 过程以字符串的形式返回一个“表单”,其中包含各种 ANSI 编码。

我想做的是将返回的字符串拆分为基于 ANSI 转义字符作为分隔符的数组,以便我可以进一步对其进行排序并在以后构建显示。

我遇到的问题是转义字符看起来不像被识别。当我在 Visual Studio 中检查字符串时,我可以看到标准的 ANSI 格式,带有一个指向左的箭头,看起来像这样:每个条目之间的 ←。这是转义字符。

如果我将相同的字符串粘贴到 notepad++ 中,它会显示为 ESC。

我尝试使用 \033 作为分隔符对字符串进行拆分,但这不起作用,我还尝试将 ESC 字符粘贴到变量中,但它只是粘贴了一个空格。

所以我想知道如何找出这个转义字符使用的字符代码,以便我可以在拆分中使用它。

我发布了一个屏幕截图,但显然我没有代表这样做。

编辑:这是返回的内容:

[02;27HDIVIDEND SETUP       11:25   Mon, 21 Jul 2014[04;05HCurrent attach point : VOD_TIM[07;05H   Code     Description[07;60HDate       Run

它不会在 StackOverflow 上显示为字符,但如果您想象该字符位于以 [

开头的每个段的前面

编辑 2:好吧,我们已经确定 int char 代码是 27,所以现在的问题是如何在拆分中使用它?

【问题讨论】:

  • 能否提供拆分代码?
  • 你能发布你的代码吗?你如何得到这些字符串 - 作为字节数组,作为字符串,或者什么?如果您可以确定问题字符的位置,只需获取其编号,如 Int32 charCode = (Int32)str[problemCharIndex] 或在调试期间在 Watch 窗口中执行相同操作 (Int32)str[problemCharIndex]
  • 输出作为字符串从一个名为 SSH.NET 的自定义库中的 Stream reader 返回我将尝试你的代码,看看我是否可以获得该字符代码
  • 您也可能有 ansi/Unicode 问题。见here

标签: c# regex split ansi openvms


【解决方案1】:

您可以尝试通过Regex 拆分字符串,如下所示:

string input = YOUR_STRING_HERE;
string pattern = @"\033";

string[] substrings = Regex.Split(input, pattern);
foreach (string match in substrings)
{
   Console.WriteLine("'{0}'", match);
}

更新:

您可以将ESC 符号用于.Net 中Regex 中的ESC 字符,请参阅Regex here 中的完整转义字符列表。

【讨论】:

  • 我认为您必须删除模式字符串之前的@。否则它会寻找文字序列\033 而不是代码033 的字符或者我在这里弄错了吗?
  • @Thorsten Dittmar 在文档中@ 仍然存在,但我不能肯定地说。如果您能提供一些关于此的额外信息,我们将不胜感激。
  • 其实忽略我说的有效!我认为@符号有所作为!感谢 VMAtm!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
相关资源
最近更新 更多