我的想法是这样的, 一个笔记只存在一个一级标题, 所以想将一级标题作为笔记的主旨, 如果文件多了的话, 这样统计的时候就能大概明白某个笔记写的什么.
汇总某个文件夹中的所有笔记, 以文件名, 一级标题(即主旨), 编辑时间为表头. 方便后续浏览
这几天在中文及英文论坛, 都找过相关话题, 一直没找到确切答案, 包括newbing, 所以不得不来求助, 希望能给予帮助指点.
大概有个办法, Frontmatter 的title可以统计, 但是不想用这个;或者一级标题里加一个特定的标签,通过标签读取行
代码完全不懂,请各位能不吝赐教, 谢谢!
kimpvp
(kimpvp)
2
在yaml中自定义一个字段用来写总结就好了。
然后用Dataview就可以列出来了。
看来还是得在yaml中总结, 那我知道怎么弄了.
谢谢
Probe
(Probe)
4
搜 “dataview + 标题 / heading” 其实还是有不少资料的, 比如这个帖子 自用dataviewjs定位到一级标题并自定义生成 passage# head1/2 | display 代码 - 经验分享
关键是需要 dv.io.load 拿到笔记全文, 然后里面啥都能提取
```dataviewjs
const pages = dv.pages('"path/to/subfolder"');
const result = [];
for (const page of pages) {
const content = await dv.io.load(page.file.path);
const regex = /^# (.+)$/gm;
let match;
const h1_headings = [];
while ((match = regex.exec(content)) !== null) {
h1_headings.push(match[1].trim());
}
result.push( [
page.file.link,
h1_headings[0] || '(h1 title not found)'
] )
}
console.log(result);
dv.table(['note', 'heading'], result);
```
好, 谢谢, 我先试下.
今天我也刚好用newbing得到了预期结果
const folderPath = "200-Page"; // 替换为你需要搜索的文件夹路径
// 获取指定文件夹中的所有文件,并按文件名排序
let files = dv.pages(`"${folderPath}"`).sort(p => p.file.name, 'asc');
// 初始化一个数组来存储表格数据
let tableData = [];
// 使用 Promise.all 并行读取所有文件内容
let contents = await Promise.all(files.map(async f => {
let content = await app.vault.readRaw(f.file.path);
// 排除代码块中的注释
let inCodeBlock = false;
return content.split('\n').filter(line => {
if (line.trim().startsWith("```")) {
inCodeBlock = !inCodeBlock;
return false;
}
return !inCodeBlock && /^# (.*?)/.test(line);
});
}));
// 遍历文件生成表格数据
files.forEach((file, i) => {
let headings = contents[i].map(p => p.replace(/^# /, '').trim());
let tags = file.file.tags ? file.file.tags.join(", ") : "无标签";
tableData.push({
fileLink: file.file.link,
heading: headings.join(' | '),
tags: tags,
modified: new Date(file.file.mtime).toLocaleString()
});
});
// 生成表格
dv.table(["文件名", "一级标题", "标签", "编辑时间"],
tableData.map(row => [row.fileLink, row.heading, row.tags, row.modified])
);