如何在长分隔字符串中获取变量的值

时间:2015-11-04 23:50:49

标签: asp.net vb.net

在db表中我有一个字符串,例如......

Var1=0;CosType=1;DefaultType=US_Pass;DateYear=1;DateRange=1;ReportFormat=0

我想创建一个VB.NET函数,它有1个输入var,字符串(上面)和"令牌"获得价值。 (返回值是令牌的值。)例如,如果我调用它(LongString是上面的字符串)....

txtValue.text = MyFunction(LongString,"DefaultType")

所以," US_Pass"将被退回。

编码MyFunction的最有效方法是什么?

我尝试过这样的事情......

return LongString.Substring(LongString.IndexOf(input_token) + 12)

我觉得我很近,但距离很远。

谢谢!

3 个答案:

答案 0 :(得分:1)

  1. 将字符串拆分为分号。

    Dim parts As String() = LongString.Split(";")
    
  2. ForEach循环中循环部分。

  3. 找到StartsWith令牌值的部分。
  4. 找到等号(IndexOf)并将所有内容放在右侧(Substring)。
  5. 这应该足以让你弄清楚。

答案 1 :(得分:1)

在您的数据库中存储这样的数据可能不是一个好主意。希望您不需要从SQL查询这些属性。

在你的情况下,我将创建一个类来封装属性。您将字符串作为构造函数参数传入,并让类管理它。

这是C#中的一个例子,它不应该太难转换为VB:

.

答案 2 :(得分:1)

只要您知道字符串中存在密钥,就可以正常工作:

public string MyFunction(string longString, string key)
{
    return
        longString
            .Split(';')
            .Select(x => x.Split('='))
            .ToDictionary(x => x[0], x => x[1])[key];
}

使用此代码:

string longString = "Var1=0;CosType=1;DefaultType=US_Pass;DateYear=1;DateRange=1;ReportFormat=0";
Console.WriteLine(MyFunction(longString, "DefaultType"));

我明白了:

US_Pass

作为VB.NET:

Public Function MyFunction(longString As String, key As String) As String
    Return longString.Split(";"c).Select(Function(x) x.Split("="c)).ToDictionary(Function(x) x(0), Function(x) x(1))(key)
End Function