如何从C#中的字符串中提取数据 [英] How to extract data from string in C#

查看:1576
本文介绍了如何从C#中的字符串中提取数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我通过RFC在我的应用程序中获取数据。 RFC返回几个参数/变量中的数据。其中一个参数返回字符串下方。

 STRUCTURE ERRMSG {FIELD TYPE = E 
FIELD ID =
FIELD NUMBER = 000
FIELD MESSAGE =无效的推荐链接
FIELD LOG_NO = FIELD
LOG_MSG_NO = 000000
FIELD MESSAGE_V1 =
FIELD MESSAGE_V2 =
FIELD MESSAGE_V3 =
FIELD MESSAGE_V4 =
FIELD PARAMETER = FIELD
ROW = 0
FIELD FIELD =
FIELD SYSTEM =
}





从上面的字符串中我如何提取FIELD MESSAGE字段的值。



我尝试过:



到目前为止,我已尝试过这个...

 Message = function.GetValue(  MESSAGE)。ToString(); 
来自 = Message.IndexOf( FIELD MESSAGE =);
to = Message.LastIndexOf( FIELD LOG_NO =);
Msg = Message.Substring(,到 - 来自)。替换( FIELD MESSAGE = )。修剪();





工作正常。但是,还有另一种方法可以做到这一点。就像使用LINQ,LIST,Lambda Expression,XML等...

解决方案

  var  match = Regex.Match(消息, @  FIELD MESSAGE =(。+?)FIELD LOG_NO).Groups [ 1 ]。值; 


我试着解析这样的数据使用Linq:



  var  data = msg。替换(  STRUCTURE ERRMSG string  .Empty)
.Split( new string [] { { } \ n},StringSplitOptions.RemoveE mptyEntries)
。选择(x =>新
{
FieldName = x.Split(' =')[ 0 ]。修剪(),
FieldValue = x.Split(' =')。Count()== 1 string .Empty:x.Split(' =')[ 1 ]。修剪()
})
.ToList();





以上代码返回:



 FieldName FieldValue 
字段类型E
字段ID
字段编号000
字段消息无效推荐链接
字段LOG_NO字段
LOG_MSG_NO 000000
字段MESSAGE_V1
字段MESSAGE_V2
FIELD MESSAGE_V3
FIELD MESSAGE_V4
FIELD PARAMETER FIELD
ROW 0
FIELD FIELD
FIELD SYSTEM





注意:我建议使用 Parse 方法编写自定义类,以便能够处理数据。


< blockquote>

  string  fieldValue = Regex.Match(message, @ <跨度class =code-string>(?< = FIELD MESSAGE =)(。* \ n?)(?= FIELD LOG_NO =))。组[ 1 ]值; 


I getting data in my application through RFC. RFC returns data in several parameters/variables. One of the parameter return below string.

STRUCTURE ERRMSG{FIELD TYPE=E 
		FIELD ID = 
		FIELD NUMBER=000 
		FIELD MESSAGE=Invalid Referral Link 
		FIELD LOG_NO= FIELD 
		LOG_MSG_NO=000000 
		FIELD MESSAGE_V1= 
		FIELD MESSAGE_V2= 
		FIELD MESSAGE_V3= 
		FIELD MESSAGE_V4= 
		FIELD PARAMETER= FIELD 
		ROW=0 
		FIELD FIELD= 
		FIELD SYSTEM=
	}



From above string how can I extract value of FIELD MESSAGE field.

What I have tried:

So far I have tried this...

Message = function.GetValue("MESSAGE").ToString();
from = Message.IndexOf("FIELD MESSAGE=");
to = Message.LastIndexOf("FIELD LOG_NO=");
Msg = Message.Substring(from, to - from).Replace("FIELD MESSAGE=", "").Trim();



It is working fine. But, is there another way to do this. Like using LINQ, LIST, Lambda Expression, XML etc...

解决方案

var match = Regex.Match(Message, @"FIELD MESSAGE=(.+?)FIELD LOG_NO").Groups[1].Value;


I'd try to parse such of data by using Linq:

var data = msg.Replace("STRUCTURE ERRMSG", string.Empty)
            .Split(new string[]{"{", "}", "\n"}, StringSplitOptions.RemoveEmptyEntries)
            .Select(x=>new
                {
                    FieldName = x.Split('=')[0].Trim(),
                    FieldValue = x.Split('=').Count() == 1 ? string.Empty : x.Split('=')[1].Trim()
                })
            .ToList();



Above code returns:

FieldName     FieldValue
FIELD TYPE        E 
FIELD ID   
FIELD NUMBER      000 
FIELD MESSAGE     Invalid Referral Link 
FIELD LOG_NO      FIELD 
LOG_MSG_NO        000000 
FIELD MESSAGE_V1   
FIELD MESSAGE_V2   
FIELD MESSAGE_V3   
FIELD MESSAGE_V4   
FIELD PARAMETER   FIELD 
ROW               0 
FIELD FIELD   
FIELD SYSTEM



Note: i'd suggest to write custom class with Parse method to be able to deal with data.


string fieldValue= Regex.Match(message, @"(?<=FIELD MESSAGE=)(.*\n?)(?=FIELD LOG_NO=)").Groups[1].Value;


这篇关于如何从C#中的字符串中提取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆