doutiaoku4495 2018-06-27 11:15
浏览 167
已采纳

如何在csv文件中的空白位置上将空字符串值添加到数据库中

My csv file having user data like this:

 firstname|lastname|Email| other fields are empty
          |        |     |
          |        |     |
          |        |     |
          |        |     |

The code I'm using is:

 package main

import (
 "encoding/csv"
 "gopkg.in/mgo.v2"
 "io"
 "log"
 "os"
)

type Mongo struct {
  // Id          int    `json:"_id" bson:"_id"`
  FirstName   string `json:"first_name,omitempty" bson:"first_name,omitempty"`
  LastName    string `json:"last_name,omitempty" bson:"last_name,omitempty"`
  Email       string `json:"email,omitempty" bson:"email,omitempty"`
  PhoneNumber string `json:"phone_number,omitempty" bson:"phone_number,omitempty"`
  Gender      string `json:"gender,omitempty" bson:"gender,omitempty"`
  Address     string `json:"address,omitempty" bson:"address,omitempty"`
  Apartment   string `json:"apartment,omitempty" bson:"apartment,omitempty"`
  Description string `json:"description,omitempty" bson:"description,omitempty"`
 }

func main() {

 session, err := mgo.Dial("localhost")
 if err != nil {
    panic(err)
 }

 defer session.Close()
 session.SetMode(mgo.Monotonic, true)

 c := session.DB("Import_Users").C("users")

 file, err := os.Open("customers.csv")

 if err != nil {
    panic(err)
 }
 defer file.Close()

 reader := csv.NewReader(file)

 for {
    record, err := reader.Read()
    if err == io.EOF {
        break
    } else if err != nil {
        panic(err)
    }

    err = c.Insert(&Mongo{record[0], record[1], record[2], record[3], record[4], record[5], record[6], record[7]})

    if err != nil {
        panic(err)
    }
    log.Printf("%#v", record)
 }
}

The error is coming while running:

Error:- panic: runtime error: index out of range

goroutine 1 [running]: main.main() /home/iron/go/src/go-training/How_to_load_csv_file/main.go:53 +0x830 exit status 2

How can I solve this error?

  • 写回答

1条回答 默认 最新

  • duanluo9369 2018-06-27 11:51
    关注

    Make sure that you have slice elements for record[0] through record[7]. Add empty padding elements. For example,

    reader := csv.NewReader(file)
    padding := make([]string, 8)  // 0 thru 7
    for {
        record, err := reader.Read()
        if err == io.EOF {
            break
        } else if err != nil {
            panic(err)
        }
        record = append(record, padding...)
        err = c.Insert(&Mongo{record[0], record[1], record[2], record[3], record[4], record[5], record[6], record[7]})
    
        if err != nil {
            panic(err)
        }
        log.Printf("%#v", record)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程