首页 > 其他分享 >kbnet.toolkit.formulas

kbnet.toolkit.formulas

时间:2024-03-29 12:14:47浏览次数:26  
标签:类库 kbnet formulas excel toolkit net

前言

2024年3月份马上就要结束,困扰我近2个月的感冒总算要痊愈了,为此特别发布本篇文章以示安慰。

kbnet.toolkit.formulas是一个.net/c#类库,提供类似Excel一样的公式用于计算数据,当然没有excel公式那么多、那么全,但是应该足够使用了。用它来做什么?难道用它来自己实现一个excel软件么?如果有此需求是可以的,其实我设计实现它的主要目的是为了数据检查和消息预警,尤其是物联网场景。下位机采集各个传感器的数据,然后提交到服务器,此时接收到数据的服务器第一步应该做什么,也许是存起来,好吧,除此之外,是不是应该根据传感器的数值做判断,从而验证传感器现场的环境状态,比如温度、压力、流速、风力等等,然后对超出数值范围的传感器发出消息预警,使得运维人员即时了解情况,从而避免各类生产事故的发生。当然,你可能会说用其他办法一样可以实现,为什么要用kbnet.toolkit.formulas这个类库,比如sql数据库、时序数据库、或者让程序员写个程序,没错,实现类似需求的方式方案有多种,只是我想说相比较于其他方案,使用这个类库也有好处的,第一它不会给sql数据库造成巨大的检索压力,第二它可以任意配置正确的公式,不仅可以检测一个点的数据,还可以几个点同时作为条件运算,第三它不需要程序员等技术人员参与,只要是会编写excel公式的工作人员,就能设置和使用,更加不需要算法工程师瞎捣鼓算法,那么你现在认识到它的价值了么?也许你还会发现其他更多好处。

 

废话不多说了,直接上类库地址:

https://www.alipan.com/s/bZmX8KkdpV9
提取码: 2b4w

.net4x:表示.net framework 4.8.1

.net6:表示.net 6

.net8:表示.net 8

 

测试代码

 1 public static void Test()
 2         {
 3             Formula.Init();
 4 
 5             var dList = new List<DataModel>();
 6 
 7             Console.WriteLine("程序暂时支持的运算符如下:异或^、并且&&、或者||、加法+、减法-、乘法*、除法/、取余%、等于=、不等于!=、不等于<>、大于>、大于等于>=、小于<、小于等于<=");
 8             Console.WriteLine("");
 9             Console.WriteLine("以下内容是在测试随机数据和定义的公式是否正确运行,其中{\"R\":\"1\"}表示一个测点。");
10             Random rd = new Random();
11             int testCount = 0;
12             while (true)
13             {
14                 testCount++;
15                 dList.Clear();
16 
17                 Console.WriteLine("**************************************");
18                 for (int d = 0; d < 1; d++)
19                 {
20                     for (int i = 0; i < 2; i++)
21                     {
22                         dList.Add(new DataModel { SheetName = "Test", ColumnName = "Device" + (d + 1).ToString(), RowName = (i + 1).ToString(), CellValue = rd.Next(200), RecordTime = DateTime.Now });
23                     }
24                 }
25                 foreach (var item in dList)
26                 {
27                     Console.WriteLine($"区域ID:{item.SheetName},设备ID:{item.ColumnName},测点ID:{item.RowName},测点值:{item.CellValue}");
28                 }
29                 var expression = "({\"R\":\"1\"}>0)&&({\"R\":\"2\"}<50)";
30                 Console.WriteLine($"公式:{expression}");
31                 var f = Formula.Parse(expression);
32                 var r = f.Compute(dList);
33                 if (r != null)
34                 {
35                     Console.WriteLine($"第 {testCount} 次,测试结果:" + r.Result.ToString());
36                 }
37 
38                 Console.WriteLine("**************************************");
39                 Console.WriteLine("是否继续测试?(y/n)");
40                 var ckey = Console.ReadLine();
41                 if (ckey.ToLower() != "y")
42                 {
43                     break;
44                 }
45             }
46 
47             Console.WriteLine("");
48             Console.WriteLine("**************************************");
49             Console.WriteLine("是否想继续测试数学运算?比如想计算表达式 \"(-1*(1+2+3+4+5)/2*-1+0.5)%3\" 的运算结果,如果想知道请输入计算公式:");
50             testCount = 0;
51             while (true)
52             {
53                 testCount++;
54 
55                 var cFunc = Console.ReadLine();//"1+1+(10/2*5-10)-50";
56                 if (!string.IsNullOrEmpty(cFunc) && !string.IsNullOrWhiteSpace(cFunc))
57                 {
58                     var f = Formula.Parse(cFunc);
59                     var r = f.Compute(dList);
60                     if (r != null)
61                     {
62                         Console.WriteLine($"第 {testCount} 次,测试结果:" + r.Result.ToString());
63                     }
64                     Console.WriteLine("#######################################");
65                     Console.WriteLine("是否继续测试?(y/n)");
66                     var ckey = Console.ReadLine();
67                     if (ckey.ToLower() != "y")
68                     {
69                         break;
70                     }
71                     else
72                     {
73                         Console.WriteLine("请输入公式:");
74                     }
75                 }
76                 else
77                 {
78                     Console.WriteLine("您输入的公式有误,请输入正确的公式");
79                 }
80             }
81 
82 
83             Console.WriteLine("");
84             Console.WriteLine("感谢使用程序,功能运行结束,按任意键退出...");
85             Console.ReadLine();
86         }

 

总结

一直以来都在研究架构和平台方面的技术,这是第一篇功能类库的文章,希望可以对您有助。

 

标签:类库,kbnet,formulas,excel,toolkit,net
From: https://www.cnblogs.com/Jkinbor/p/18103522

相关文章

  • Ubuntu22.04下Issac Gym/宇树机器人RL&gcc/g++,CUDA,CUDA ToolKit,Pytorch配置环境配
    前置条件本随笔写作Condition:在本人3050Ti笔记本上配好环境后,再在室友4060笔记本上边配边记录整理所得。室友的系统已经配好了相应驱动,因此,本随笔内容基于已经安装了NVIDIA显卡驱动的系统。下次搞到没装驱动的系统我再补一个随笔。宇树机器人宇树科技的文档中心有一个简单的安......
  • [C#] [WPF] MVVMToolkit入门案例心得
    跟着做的第一个MVVM项目,学到一点基础的东西,记下来;有些用词不准确假设我们要做一个页面,通过按钮来控制上方文本框的文字,通过勾选框来控制按钮的激活状态⬇️一般流程需要3个属性,2个私有属性,1个RelayCommand属性代表按钮点击后事件,并配有相应的getter/setter文本......
  • 2-12. 使用 UI Toolkit 和 UI Builder 制作物品编辑器
    Editor在Assets目录下创建Editor目录,然后在Editor目录下创建UIBuilder然后在UIBuilder下面右键创建UIToolkitEditor,起名叫ItemEditor然后就会打开一个ItemEditor窗口这个窗口也可以通过Window->UIToolkit->ItemEditor进行打开打开UIBuilder下......
  • Unity新版UI系统UI Toolkit初探
    目前Unity中应用最广泛的官方界面系统是UnityUI,也就是通常说的UGUI。这个系统功能强大,官方支持较好,并且基于GameObject的设计和Unity开发的其他方面是一致的,便于理解和使用。但是,成也GameObject败也GameObject,因为每一个界面元素都要一个GameObject挂上好几个Component,当界面上的......
  • 手把手的使用Toolkit插件在诗情画意中完成AI诗朗诵
    本文分享自华为云社区《【云驻共创】手把手的使用Toolkit插件在诗情画意中完成AI诗朗诵》,作者:红目香薰。云原生时代,开发者们的编程方式、编程习惯都发生了天翻地覆的变化,大家逐渐地习惯在云端构建自己的应用。作为新一代的开发者们,如何更快速了解云,学习云,使用云,更便捷、更智能......
  • 【HMS Core】ToolKit,Merchant Service has not been enabled yet
    ​【问题描述】集成应用内支付时,一直提示未开通商户服务,实际商户服务已开通。​【解决方案】一般是由于AndroidStudio里的开发者账户和联盟网站对应开通商户服务的不是同一个账户造成的​PS:如果有团队帐号,还需注意,是否是团队帐号开通的,需选择正确的team。​......
  • MaterialDesignInXamlToolkit 5.0 发布
    5.0.0发布这是一个重大版本更新,又许多破坏性变化升级到5.0.0版本,请参考:https://www.cnblogs.com/sesametech-dotnet/p/18028565变化关键性变化Allowfortransparentcolorsforgeneratediconsby@Kebooin#3273AddnewoptionstotheExpanderAssistclassby@Abd......
  • mvvmtoolkit+snackbar弹窗消息通知
    需求场景:在MainView.xaml下添加一个SnackBar并将其ZIndex设置成1,后续所有的消息弹窗都通过MainView来展示代码设置:MVVMToolkit+MaterDesigner组+全局静态类MainView下添加SnackBar,SnackBar下的消息数据以及是否展示属性绑定至一个全局消息类中,后续所有的消息展示则可以通过......
  • Material Design In XAML Toolkit 5.0.0 Migration Guide
    MaterialDesignInXamlToolkit5.0有破坏性的更新,下面的连接可以用于4.x升级到5.0的一个手册。仅供参考,欢迎升级5.0时使用。https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/issues/2435破坏性更新https://github.com/MaterialDesignInXAML/MaterialDesig......
  • 探索MVVM Toolkit:简化.NET应用开发,构建高效MVVM架构
     概述:MVVMToolkit是.NET平台的强大工具包,旨在简化MVVM应用程序开发。提供基础功能如ViewModelBase和RelayCommand,支持数据绑定和命令绑定,通过Messenger实现消息订阅发布。其高级功能包括ObservableObject和WeakEventListener,助力开发人员构建可维护、高性能的MVVM应用,提升用......