C# 文本文字识别

起名什么的很麻烦 2016-11-29 04:30:46
现在的控制器做的好高级,都发的文本,格式是文本的,正则表达式书写能力还很弱,大家帮帮忙PS自己写估计花4小时
3个问题:分别识别3个参数的开关量
S_SAFINI S_FMASK S_FDEF
//?S_FDEF 文本如下 换行表示有\r,应该是linux的格式 开头1空格2数字1空格ON(OFF)1空格的格式
24 ON MPU Overheat (#TEMP)
25 ON Program Error (#PROG)
26 ON Memory Overflow (#MEM)
27 ON MPU Overuse (#TIME)
28 ON Hardware Emergency Stop (#ES)
29 ON Servo Interrupt (#INT)
30 ON File Integrity (#INTGR)
31 ON Component Failure (#FAILURE)
//?S_FMASK
24 ON MPU Overheat (#TEMP)
25 ON Program Error (#PROG)
26 ON Memory Overflow (#MEM)
27 ON MPU Overuse (#TIME)
28 ON Hardware Emergency Stop (#ES)
29 ON Servo Interrupt (#INT)
30 OFF File Integrity (#INTGR)
31 ON Component Failure (#FAILURE)
//?S_SAFINI
28 OFF Hardware Emergency Stop (#ES)
31 OFF Component Failure (#FAILURE)
...全文
401 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2016-11-29
  • 打赏
  • 举报
回复
使用可观察列表的代码就是: IObservable<string>() .SkipUntil(source.where(p=>p==@"//?S_FDEF")).TakeUntil(p=>p==@"//?S_FMASK"||p=="@//?S_FMASK") 简单解释,读取任意一行,判定是否为S_FDEF,不是跳过,直到读取到S_FDEF,接下去都是S_FDEF的数据,直到出现S_FMASK或者S_FMASK未知 同样,道理可以做出另外两个。 这是知道,RX编程的人滴理解 如果你不知道RX编程,那么可以使用传统状态机方式: 状态机方式 actionName=""; readline(!eof) { if(readline=="S_FDEF") actionName="S_FDEF" elseif(readline="xxxx") actionName="xxxx" else if(readline="yyy") actionname="yyy" else 具体参数解析(actionname,readline) } 具体参数解析(actionname,readline) { //这里你就随意了,24 ON MPU Overheat (#TEMP) 这种东西解析就不困难了,分组捕获就行 }
  • 打赏
  • 举报
回复
@"(2[468])\s+(ON|OFF)"

没搞清楚你到底要哪几个
foreach(Match m in Regex.Matches(txt,@"(2[468])\s+(ON|OFF)"))
{
Console.WriteLine("No:{0} State:{1}",m.Groups[1].Value,m.Groups[2].Value)
}
秋的红果实 2016-11-29
  • 打赏
  • 举报
回复
更正为:\s\d{2}\s\w{2,3}
秋的红果实 2016-11-29
  • 打赏
  • 举报
回复
结果就是: 25 ON 26 ON 27 ON 28 ON 29 ON 30 OFF 31 ON ……
秋的红果实 2016-11-29
  • 打赏
  • 举报
回复
^\s\d{2}\s\w{2,3}\b
  • 打赏
  • 举报
回复
引用 4 楼 From_TaiWan 的回复:
哪三个参数?举例说明
看3楼 斜杠写反了 不要介意
秋的红果实 2016-11-29
  • 打赏
  • 举报
回复
哪三个参数?举例说明
  • 打赏
  • 举报
回复
引用 楼主 w492901074 的回复:
现在的控制器做的好高级,都发的文本,格式是文本的,正则表达式书写能力还很弱,大家帮帮忙PS自己写估计花4小时 3个问题:分别识别3个参数的开关量 S_SAFINI S_FMASK S_FDEF //?S_FDEF 文本如下 换行表示有\r,应该是linux的格式 开头1空格2数字1空格ON(OFF)1空格的格式 24 ON MPU Overheat (#TEMP) 25 ON Program Error (#PROG) 26 ON Memory Overflow (#MEM) 27 ON MPU Overuse (#TIME) 28 ON Hardware Emergency Stop (#ES) 29 ON Servo Interrupt (#INT) 30 ON File Integrity (#INTGR) 31 ON Component Failure (#FAILURE) //?S_FMASK 24 ON MPU Overheat (#TEMP) 25 ON Program Error (#PROG) 26 ON Memory Overflow (#MEM) 27 ON MPU Overuse (#TIME) 28 ON Hardware Emergency Stop (#ES) 29 ON Servo Interrupt (#INT) 30 OFF File Integrity (#INTGR) 31 ON Component Failure (#FAILURE) //?S_SAFINI 28 OFF Hardware Emergency Stop (#ES) 31 OFF Component Failure (#FAILURE)
引用 2 楼 starfd 的回复:
你这格式到底是什么格式? 你要取得又是哪部分数据?
string a = @" 24 ON MPU Overheat (#TEMP)/r 25 ON Program Error (#PROG)/r 26 ON Memory Overflow (#MEM)/r 27 ON MPU Overuse (#TIME)/r 28 ON Hardware Emergency Stop (#ES)/r 29 ON Servo Interrupt (#INT)/r 30 ON File Integrity (#INTGR)/r 31 ON Component Failure (#FAILURE)/r"; 我要的是 25 后面是ON还是OFF 26 后面是ON还是OFF ......
  • 打赏
  • 举报
回复
你这格式到底是什么格式? 你要取得又是哪部分数据?
crystal_lz 2016-11-29
  • 打赏
  • 举报
回复
//?S_FDEF 文本如下 换行表示有\r,应该是linux的格式 开头1空格2数字1空格ON(OFF)1空格的格式 表示完全没有看懂

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧