Add native place cascading selector and generated data
This commit is contained in:
1 parent
2b93bc2e64
commit
0854a92cc0
6 files changed
+159
-2
No files matched your search
@@ -0,0 +1,43 @@
|
||||
import { readFile, writeFile } from 'node:fs/promises'
|
||||
import { resolve } from 'node:path'
|
||||
|
||||
const [inputFile, outputFile] = process.argv.slice(2)
|
||||
|
||||
if (!inputFile || !outputFile) {
|
||||
throw new Error('用法:node scripts/generate-native-place-data.mjs <ok_data_level4.csv> <输出文件>')
|
||||
}
|
||||
|
||||
function parseCsvLine(line) {
|
||||
const values = []
|
||||
let value = ''
|
||||
let quoted = false
|
||||
|
||||
for (let index = 0; index < line.length; index += 1) {
|
||||
const character = line[index]
|
||||
if (character === '"') {
|
||||
if (quoted && line[index + 1] === '"') {
|
||||
value += character
|
||||
index += 1
|
||||
} else {
|
||||
quoted = !quoted
|
||||
}
|
||||
} else if (character === ',' && !quoted) {
|
||||
values.push(value)
|
||||
value = ''
|
||||
} else {
|
||||
value += character
|
||||
}
|
||||
}
|
||||
values.push(value)
|
||||
return values
|
||||
}
|
||||
|
||||
const csv = await readFile(resolve(inputFile), 'utf8')
|
||||
const rows = csv.trim().split(/\r?\n/).slice(1).map((line) => {
|
||||
const [id, pid, deep, , , , , name] = parseCsvLine(line)
|
||||
return [Number(id), Number(pid), Number(deep), name]
|
||||
})
|
||||
|
||||
const source = `// 由 AreaCity-JsSpider-StatsGov 的 ok_data_level4.csv 生成,数据版本 2025.251231.260403(2026-04-03)。\n// 上游项目采用 MIT License:https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov\nexport type NativePlaceRow = readonly [id: number, pid: number, deep: number, name: string]\n\nexport const nativePlaceRows: readonly NativePlaceRow[] = ${JSON.stringify(rows)} as const\n`
|
||||
|
||||
await writeFile(resolve(outputFile), source, 'utf8')
|
||||
Reference in new issue
Block a user