请教DataView能否实现从多文件的一段重复文字中提取数据列表的功能?

因工作需要经常需要统计数据,每天的内容几乎一样,想请教一下能否用 Dataview 实现从多个文件中定位某一段文字提取相应数字并列表显示的功能。
大概如下:


多个文件中都有重复的一段话如下:

今天门店共销售35000元,男装50件,女装60件,其他120件,计划完成率85%,效益较好。

预期的效果

通过Dateview自动读取关键字,列出表格如下:

日期  | 销售额  |  男装  |  女装  | 完成率 | 效益
0206 | 25000  |  40  |  60 |  70% | 不佳
0207 | 35000  |  50  |  80 |  85% | 好

类似上述表格的形式, 虽然是固定字段,但是没有设置标签,这是不是有点为难Dataview了? 特请教,用代码如何实现,感谢大佬!

可以写,dataview主要用来获取内容及渲染表格,具体数据使用正则匹配就行。
当然前提是内容真的很重复及有规律,比如“共销售35000元”可以匹配销售和元之间的数字,这么来写正则表达式。

感谢答复,编程小白不会写,能否给段演示代码,我自己去调试。 :grinning:

const pages = dv.pages('"数据来源"')
let list = []
for (const page of pages) {
  const file = app.vault.getAbstractFileByPath(page.file.path)
  const str = await app.vault.read(file)
  const reg = /销售(\d+)元,男装(\d+)件,女装(\d+)件,其他(\d+)件,计划完成率(\d+)%,效益(.{2})/
  const result = str.match(reg)
  if (result) {
    const data = {
      date: page.file.name,
      sales: result[1],
      man: result[2],
      women: result[3],
      other: result[4],
      rate: result[5],
      effect: result[6]
    }
    list.push(data)
  }
}
dv.table(
  ["日期","销售额","男装","女装","其他","完成率","效益"],
  list.map((item, index) => {
    return [
      item.date,
      item.sales,
      item.man,
      item.women,
      item.other,
      item.rate,
      item.effect]
    })
)

测试文件结构为: “数据来源/0206”,内容仅有示例中的一句话。

效果如下

1 个赞

太感谢啦!好好学习,周末去试试!多谢多谢! :100:

测试代码通过,还有两个小问题:
1、原文中但凡数字前后有空格 就无法提取该数字,必须汉字和数字间没有空格才行,但实际录入时,经常会自动增加空格,这个如何解决?
2、另外如何限制输出条数,比如只列表近5天的。
谢谢大佬!

因为匹配模式为“文字(\d+)文字” \d+表示匹配多个数字,无空格。如果想灵活使用可以简单了解一下正则表达式,对上面的例子微调即可。([\s\S]+),简单点直接把空格也收录 :melting_face: