使用golang根据位置解析字符串的好方法是什么?

时间:2017-08-07 02:23:15

标签: string parsing go

我正在设计一个简单的应用程序,使用go来读取代表客户文件格式的几种文件格式。我的第一个想法是读取每个文件行,然后将其解析为结构。到目前为止这么好,但我需要根据它的索引拆分每个字段。例如:

 public float speed = 3;

 public void MoveLeft(){
     transform.Translate(-Vector3.right * speed * Time.deltaTime);
 }

 public void MoveRight(){
     transform.Translate(Vector3.right * speed * Time.deltaTime);
 }

Id从位置1开始到位置4 = 1003 CustomerId是位置5到7以及与该结构相关的所有其他字段。

我想知道是否有更高效的读取格式并应用于此文件行,我想为每个字段创建一些结构并具有开始和结束字段,但这对我来说听起来很奇怪。

line := "1003450020170804890000000022344"

我不知道我是否正在路上,也许有更优雅的东西可以在这种情况下更好地工作。

2 个答案:

答案 0 :(得分:5)

var a, b int
n, err := fmt.Sscanf("1003450020170804890000000022344", "%4d%3d", &a, &b)
if err != nil {
   // ...
}

fmt.Println(a) // 1003
fmt.Println(b) // 450

然后你可以用这些创建一个结构。

答案 1 :(得分:1)

解析函数很简单,可能就足够了,而不是声明辅助数据结构。

例如,类似于:

func NewRecord(line string) (*Record, error) {

    if len(line) < 14 {
        return nil, fmt.Errorf("line is too short: %d", len(line))
    }

    return &Record{
        Id:   line[0:4],
        Name: line[4:14],
    }, nil
}