加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
parse.go 1.14 KB
一键复制 编辑 原始数据 按行查看 历史
水不要鱼 提交于 2024-02-22 12:43 . 重构
// Copyright 2024 FishGoddess. All rights reserved.
// Use of this source code is governed by a MIT style
// license that can be found in the LICENSE file.
package props
import (
"fmt"
"strings"
)
const (
tokenCR = "\r"
tokenLF = "\n"
tokenComment = "#"
tokenSeparator = "="
)
func parseLine(i int, line string) (key string, value Value, err error) {
kv := strings.SplitN(line, tokenSeparator, 2)
if len(kv) < 2 {
return "", "", fmt.Errorf("props: parse line %d without key or value", i)
}
key = strings.TrimSpace(kv[0])
value = Value(strings.TrimSpace(kv[1]))
return key, value, nil
}
func parseLines(lines []string) (map[string]Value, error) {
entries := make(map[string]Value, len(lines))
for i, line := range lines {
line = strings.TrimSuffix(line, tokenCR)
line = strings.TrimSpace(line)
if line == "" || strings.HasPrefix(line, tokenComment) {
continue
}
key, value, err := parseLine(i+1, line)
if err != nil {
return nil, err
}
entries[key] = value
}
return entries, nil
}
func parse(str string) (map[string]Value, error) {
lines := strings.Split(str, tokenLF)
return parseLines(lines)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化