我有一个.txt文件给我解析来提取某些信息,我真的不想写一个扫描仪来做这件事。它对我来说类似ANSI,可能还有一点点添加。我不知道。它是几年前几年硬件的自动输出。这里还有一些只是为了了解我正在处理的内容以及输出需要的样子。
<ESC>[00p<ESC>(1*259*01/26/10*11.05*<CR>
<ESC>[05pEJ LOG COPIED OK 247C0200 <CR>
<FF><ESC>[05p*3094*1*R*09<CR>
<ESC>[00p<ESC>(1*260*01/26/10*11.07*<CR>
<ESC>[05pSUPERVISOR MODE EXIT <CR>
预期产出:
*259*01/26/10*11.05*
EJ LOG COPIED OK 247C0200
*3094*1*R*09
*260*01/26/10*11.07*
SUPERVISOR MODE EXIT
就像我说的,这只是它的页面和页面中的一点点。可能是ANSI我不确定。如果我遗漏了一些重要信息,请告诉我。我用C#btw编写代码。我会包括设备的名称/型号,但我不知道。谢谢!
答案 0 :(得分:2)
这对我来说是一个电子杂志的一些收银机 - 销售交易的日志从哪里下载...不知道哪台机器 - 其中一些能够通过串口通过,通过使用逃避代码触发从电子期刊打开日志 - 我推理它,因为我看到EJ被使用...可能是三星收银机....
希望这有帮助, 最好的祝福, 汤姆。
答案 1 :(得分:1)
答案 2 :(得分:0)
尝试这样的事情:
string input = @"
<ESC>[00p<ESC>(1*259*01/26/10*11.05*<CR>
<ESC>[05pEJ LOG COPIED OK 247C0200 <CR>
<FF><ESC>[05p*3094*1*R*09<CR>
<ESC>[00p<ESC>(1*260*01/26/10*11.07*<CR>
<ESC>[05pSUPERVISOR MODE EXIT <CR>";
foreach (Match m in Regex.Matches(input,
@"(?:(?:<FF>)?(?:<ESC>[\[\(](?:\d{2}p|\d\*))+)(?<output>.*)",
RegexOptions.Multiline))
{
Console.WriteLine(m.Groups["output"].Value);
}
您需要替换:
<ESC>
\x1B
<FF>
\xFF
<CR>
\x0D
答案 3 :(得分:0)
看起来大多数'标签'都是一样的。如果是一次性拍摄,您可以在文字编辑器中进行搜索/替换,以移除<ESC>
,<CR>
,[00p
,<FF>
和[05p
而不是编写代码来做到这一点?当然你只展示了一个片段,所以也许有很多不同的标签需要删除...
答案 4 :(得分:0)
这与我ANSI Escape sequences非常相似。搜索它会给你很多结果。 This paper可能会让您进一步了解ANSI标准。
您正在寻找的是一个可以读取这些代码序列的解析器。 Here是用C编写的解析器,声称从ANSI序列输入中删除控制序列。也许你想尝试一下。