配置文件格式 INI 快速上手

1.简介

INI 的全称是 Initialization,即为初始化文件,是 Windows 系统配置文件所采用的存储格式。

有时候,INI 文件也会以不同的扩展名出现,如“.cfg”、“.conf”、或“.txt”。但为了可读性,不建议这么做。

因为 INI 并没有一个统一的标准,所以这里介绍常用的 INI 格式内容。*

2.语法

INI 是一种简单实用的配置文件格式,通常由节、参数和注释组成。

节(Section)是键值对的分组。

所有的 Section 名称都是独占一行,并且 Section 名字都被方括号 [] 包围。在 Section 声明后的所有键值对都属于该 Section。一个 Section 没有明显的结束标识符,一个 Section 的开始就是上一个 Section 的结束。

[section]

注意,不同节之间的变量是可以同名的。

正因为没有显式的“节结束”分隔符(例如 XML 的</tag>)。因此,节在语法上不能任意嵌套。必要时,可以通过将层次结构扁平化并在节名(通常使用点 . 分隔)来实现嵌套。一级嵌套通常是支持的,称为子节。

[db]
user="admin"
password="admin"

[db.mysql]
server=10.0.0.1
port=3306

[db.redis]
server=10.0.0.2
port=6379

参数使用键值对表示。每一个键值对表示一项配置,键与值使用等号分隔。

name=value

注释以分号(;)开头,有一些 INI 变种也支持使用井号(#)来注释。

; this is comment text

3.示例

例如下面是一个使用键值对表示的后台服务配置。

; server basic conf
[server]
name=UserProfileServer
maxconns=10000
queuecap=10000
queuetimeout=300

# log conf
[log]
loglevel=ERROR
logsize=10M
lognum=10
logpath=/usr/local/app/log

4.解析

在解析上面的配置时,可以按行读取,然后放到 map 中。

下面以 Go 为例,完成对上面配置文件的解析。

package main

import (
	"bufio"
	"errors"
	"fmt"
	"io"
	"os"
	"strings"
)

func ParseConf(confPath string) (map[string]string, error) {
	if confPath == "" {
		return nil, errors.New("param is ill")
	}

	f, err := os.Open(confPath)
	if err != nil {
		return nil, err
	}
	defer f.Close()

	// store config info
	m := make(map[string]string)

	bfRd := bufio.NewReader(f)
	// read by line, the line terminator is '\n'
	for {
		line, err := bfRd.ReadString('\n')
		if err == io.EOF {
			return m, nil
		}
		if err != nil {
			return nil, err
		}
		// ignore blank line
		if strings.TrimSpace(line) == "" {
			continue
		}
		// ignore comment line
		if strings.TrimSpace(line)[0] == ';' || strings.TrimSpace(line)[0] == '#' {
			continue
		}
		// ignore section line
		if strings.TrimSpace(line)[0] == '[' {
			continue
		}
		kv := strings.Split(strings.TrimSpace(line), "=")
		if len(kv) == 2 {
			m[kv[0]] = kv[1]
		}
	}
}

func main() {
	conf, _ := ParseConf("server.ini")
	for k, v := range conf {
		fmt.Printf("%v=%v\n", k, v)
	}
}

运行结果:

name=UserProfileServer
maxconns=1000
queuecap=10000
queuetimeout=300
loglevel=ERROR
logsize=10M
lognum=10

推荐使用专业的第三方库来完成 INI 的解析,比如 Golang 中强大的 spf13/viper



参考文献

INI file - wikipedia

相关推荐

  1. 配置文件格式 INI 快速

    2024-07-21 15:34:02       20 阅读
  2. 配置文件格式 XML 快速

    2024-07-21 15:34:02       17 阅读
  3. Electron快速

    2024-07-21 15:34:02       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 15:34:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 15:34:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 15:34:02       45 阅读
  4. Python语言-面向对象

    2024-07-21 15:34:02       55 阅读

热门阅读

  1. 网站工作原理详解

    2024-07-21 15:34:02       19 阅读
  2. 【Golang】你真的学会切片了吗?

    2024-07-21 15:34:02       16 阅读
  3. Emacs vs IDE:用Emacs写程序真的更方便吗?

    2024-07-21 15:34:02       18 阅读
  4. libevent版本和日志相关接口

    2024-07-21 15:34:02       18 阅读
  5. 编写一款2D CAD/CAM软件(二十一)生产ASCII ART Logo

    2024-07-21 15:34:02       16 阅读
  6. 贝叶斯实现拼写检查器

    2024-07-21 15:34:02       18 阅读