github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/cmd/test/others/func/import/text.go (about)

     1  package main
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  	"strings"
     7  
     8  	"github.com/easysoft/zendata/cmd/test/others/func/comm"
     9  	fileUtils "github.com/easysoft/zendata/pkg/utils/file"
    10  )
    11  
    12  var (
    13  	tableName string
    14  	filePath  string
    15  	colNum    int
    16  )
    17  
    18  func main() {
    19  	flag.StringVar(&tableName, "t", "", "")
    20  	flag.StringVar(&filePath, "f", "", "")
    21  	flag.IntVar(&colNum, "c", 0, "")
    22  
    23  	flag.Parse()
    24  
    25  	tableName = "biz_" + strings.TrimLeft(tableName, "biz_")
    26  	db := comm.GetDB()
    27  	db.Exec(fmt.Sprintf(comm.TruncateTable, tableName))
    28  
    29  	createTableSql := fmt.Sprintf(comm.CreateTableTempl, tableName)
    30  	err := db.Exec(createTableSql).Error
    31  	if err != nil {
    32  		fmt.Printf("create table %s failed, err %s", tableName, err.Error())
    33  		return
    34  	}
    35  
    36  	content := fileUtils.ReadFile(filePath)
    37  	insertSqlArr := make([]string, 0)
    38  
    39  	for _, line := range strings.Split(content, "\n") {
    40  		arr := strings.Split(strings.TrimSpace(line), " ")
    41  
    42  		if colNum >= len(arr) {
    43  			continue
    44  		}
    45  
    46  		content := strings.TrimSpace(arr[colNum])
    47  		if content == "" {
    48  			continue
    49  		}
    50  
    51  		insert := fmt.Sprintf("('%s')", content)
    52  		insertSqlArr = append(insertSqlArr, insert)
    53  	}
    54  
    55  	for i := 0; i < 1000; i++ {
    56  		start := i * 10000
    57  		end := (i + 1) * 10000
    58  
    59  		if end > len(insertSqlArr) {
    60  			end = len(insertSqlArr)
    61  		}
    62  
    63  		arr := insertSqlArr[start:end]
    64  
    65  		sql := fmt.Sprintf(comm.InsertTemplate, tableName, strings.Join(arr, ","))
    66  		err = db.Exec(sql).Error
    67  		if err != nil {
    68  			fmt.Printf("insert data failed, err %s", err.Error())
    69  			return
    70  		}
    71  
    72  		if end >= len(insertSqlArr) {
    73  			break
    74  		}
    75  	}
    76  }