我正在设计一个简单的应用程序,使用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"
我不知道我是否正在路上,也许有更优雅的东西可以在这种情况下更好地工作。
答案 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
}