c# - 如何拆分和求和字符串值的成员
问题描述
我有一个数据库列,它是一个文本字段,这个文本字段包含看起来像
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=”。而不是所有三个,加上我还没有弄清楚如何对字符串求和。有人帮助......请。
解决方案
正则表达式是首选解决方案。或者拆分,拆分和拆分。
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;
}
}
}
推荐阅读
- python - Python lxml soupparser 失败并出现“无效的 PI 名称”
- android - Leanback ListRow 在屏幕中心滚动
- java - 如何从图像列表中制作视频?
- reactjs - 将 React 16 应用程序升级到 Apollo 2 问题
- tfs - 如何在 TFS 中重命名多个标签
- c - 如何读取在预期浮点数末尾错误输入的字符?
- python - Python,Pandas:如何更改 DataFrame.plt.density() 的带宽选择?
- java - 如何对自身进行递归回溯?
- visual-studio-code - 我可以根据文件类型设置 VS Code 默认 EOL 吗?
- weather-api - 是否有过去 NOAA 天气预报的 API(预报档案)?