如何从C#中的字符串中提取数据 [英] How to extract data from string in 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 withParse
method to be able to deal with data.
string fieldValue= Regex.Match(message, @"(?<=FIELD MESSAGE=)(.*\n?)(?=FIELD LOG_NO=)").Groups[1].Value;
这篇关于如何从C#中的字符串中提取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!