首页 > 解决方案 > 如何拆分和求和字符串值的成员

问题描述

我有一个数据库列,它是一个文本字段,这个文本字段包含看起来像

I=5212;A=97920;D=20181121|I=5176;A=77360;D=20181117|I=5087;A=43975;D=20181109

并且有时会有所不同,看起来像:

I=29;A=20009.34;D=20190712;F=300|I=29;A=2259.34;D=20190714;F=300

其中“I”代表发票 ID,“A”代表发票金额,“D”代表 YYYYMMDD 格式的日期,“F”代表来自外国供应商的原始外币价值。

我正在获取该列并将其绑定到一个数据网格,该数据网格有一个标有“显示金额”的按钮。单击按钮时,它会获取选定的行并拆分字符串以提取“A”

我需要在列结果中获取所有带有 A= 的部分......即

A=97920
A=77360
A=43975

然后将它们加在一起并在标签上显示结果。

我尝试使用“|”进行拆分 首先,提取子字符串 'A=' 然后使用 ';' 拆分它 获取“=”之后的金额。


string cAlloc;
string[] amount;
string InvoiceTotal;
string SupplierAmount;
string BalanceUnpaid;           

DataRowView dv = invoicesDataGrid.SelectedItem as DataRowView;

if (dv != null)
 {
   cAlloc = dv.Row.ItemArray[7].ToString();
   InvoiceTotal = dv.Row.ItemArray[6].ToString();

    if (invoicesDataGrid.Columns[3].ToString() == "0")
    {
       lblAmount.Foreground = Brushes.Red;
       lblAmount.Content = "No Amount Has Been Paid Out to the Supplier";
    }
    else
    {
       amount = cAlloc.Split('|');

       foreach (string i in amount)
       {
         string toBeSearched = "A=";
         string code = i.Substring(i.IndexOf(toBeSearched) + toBeSearched.Length);
          string[] res = code.Split(';');

          SupplierAmount = res[0];

          float InvTotIncl = float.Parse(InvoiceTotal, CultureInfo.InvariantCulture.NumberFormat);
          float AmountPaid = float.Parse(SupplierAmount, CultureInfo.InvariantCulture.NumberFormat);
          float BalUnpaid = InvTotIncl - AmountPaid;
          BalanceUnpaid = Convert.ToString(BalUnpaid);
          if (BalUnpaid == 0)
          {
            lblAmount.Content = "Amount Paid = " + SupplierAmount + "  No Balance Remaining, Supplier Invoice Paid in Full";
          }
          else if (BalUnpaid < 0)
          {
            lblAmount.Content = "Amount Paid = " + SupplierAmount + "  Supplier Paid an Excess of " + BalanceUnpaid;
          }
          else
          {
            lblAmount.Content = "Amount Paid = " + SupplierAmount + "  You Still Owe the Supplier a Total of " + BalanceUnpaid; ;
           }
         }

}

但我只能提取 A=43975,最后一个“A=”。而不是所有三个,加上我还没有弄清楚如何对字符串求和。有人帮助......请。

标签: c#wpf

解决方案


正则表达式是首选解决方案。或者拆分,拆分和拆分。

  var cAlloc = "I=29;A=20009.34;D=20190712;F=300|I=29;A=2259.34;D=20190714;F=300";
  var amount = cAlloc.Split('|');

  decimal sum = 0;
  foreach (string i in amount)
  {
    foreach (var t in i.Split(';'))
    {
      var p = t.Split('=');
      if (p[0] == "A")
      {
        var s = decimal.Parse(p[1], CultureInfo.InvariantCulture);
        sum += s;
        break;
      }
    }
  }

推荐阅读