如何使用 JavaScript 对 BIRT 上的 IP 地址进行排序?

发布于 2025-01-03 17:26:15 字数 662 浏览 2 评论 0原文

我是 BIRT 的新手,而且我不是 javascript 专业人士。我正在使用 birt 通过从数据库中获取一些信息来创建一些报告。我在一列上有作为字符串的 IP 地址。 BIRT 为表提供了一个排序部分,我在那里有这个表达式;

if(params["sorting"].value=="startdate")
dataSetRow["r_date_0"]
else if(params["sorting"].value=="enddate")
dataSetRow["r_date_1"]
else if(params["sorting"].value=="ipaddress")
dataSetRow["r_vchar_2"]
else
dataSetRow["r_vchar_3"]

这对于开始日期和结束日期来说非常有效,但是当涉及到 IP 地址时,它将它们作为字符串进行比较,因此在排序的报告中,我看到“2”比“199”大。

我可以用“.”分隔 IP 地址并将它们解析为整数并比较我是否使用 python 或者 java,但我不确定如何在 BIRT 环境中使用 javascript 来执行此操作。

任何关于如何修改我的表达以满足我的需求的想法将不胜感激。

I'm a total newbie on BIRT and I'm not a javascript pro. I am using birt to create some reports by getting some information from my database. I have ip addresses on a column as strings. BIRT provides a sorting section for tables and I have this expression right there;

if(params["sorting"].value=="startdate")
dataSetRow["r_date_0"]
else if(params["sorting"].value=="enddate")
dataSetRow["r_date_1"]
else if(params["sorting"].value=="ipaddress")
dataSetRow["r_vchar_2"]
else
dataSetRow["r_vchar_3"]

this is working perfect for startdate and enddate, but when it comes to the ipaddresses, it compares them as string so in the sorted report, i see like '2' is bigger then '199'.

I could just split ip addresses with '.' and parse them to integers and compare if i was working with python or java, but I'm not sure how to do this with javascript in BIRT environment.

Any ideas on how can i modify my expression to achieve my needs will be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

想念有你 2025-01-10 17:26:15

在数据集中使用计算列,在其中将 IP 地址转换为可以排序的形式,例如,

var addrArray = dataSetRow["r_vchar_2"].split(".");
var num = 0;
for (var i=0;i<addrArray.length;i++) {
  var power = 3-i;
  num += ((parseInt(addrArray[i])%256 * Math.pow(256,power)));
}
num;

您可以使用此字段进行排序,并使用原始字段来显示 ip 地址

Use in your dataset a computed column, where you transform your ip-addresses in a form that they can be sorted, e.g

var addrArray = dataSetRow["r_vchar_2"].split(".");
var num = 0;
for (var i=0;i<addrArray.length;i++) {
  var power = 3-i;
  num += ((parseInt(addrArray[i])%256 * Math.pow(256,power)));
}
num;

You can use this field for sorting, and the original field for displaying ip-addresses

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文