亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang如何格式化txt?

golang如何格式化txt?

Go
ABOUTYOU 2022-10-17 09:53:08
我有一個動態的 json,我將其轉換為 txt: JSON 示例:   {name: luis, last name: gomez, id_number: 87846516}我轉換它的代碼是這樣的:    file, _: = json.MarshalIndent (string (jsonData), "", "")     data: = ioutil.WriteFile ("test.txt", file, 0644)我成功地將它轉換為txt,但我需要給它一個特定的格式,其中只有值出現,沒有標簽,分隔如下:     luis | gomez | 87846516格式我不知道怎么給它。
查看完整描述

2 回答

?
森欄

TA貢獻1810條經驗 獲得超5個贊

您似乎正在從數據庫中獲取數據,然后將其保存到文本文件中。最好的方法是從數據庫中獲取數據,然后簡單地遍歷每一行。目前尚不清楚為什么將問題提出為轉換 json 數據,如果它可以從數據庫中獲得。與其將其轉換為 json,不如直接將值寫入文件。


您可以打開一個文件,以便附加每個條目,然后在完成文件后關閉。我提供了一個示例文件,無論返回的行數(我假設數據庫中的每一行都是一個新行)或列數,它都會為您提供所需的輸出。


以下代碼經過測試并打?。簂uis | gomez | 87846516 


OS.APPEND 將在每次寫入時附加一個新行。因此,如果您多次運行此代碼,它不會覆蓋它而是添加到文件中。


package main


import (

    "database/sql"

    "fmt"

    "log"

    "os"

    "strings"


    _ "github.com/go-sql-driver/mysql"

)


type DbDao struct {

    db *sql.DB

}


var db DbDao


func (d *DbDao) Init(connstr string) error {


    db, err := sql.Open("mysql", connstr)

    if err != nil {

        return err

    }

    err = db.Ping()

    if err != nil {

        return err

    }

    d.db = db

    return nil

}


func main() {


    dblogin := os.Getenv("DBLOGIN")

    dbString := fmt.Sprintf("root:%s@/testDB", dblogin)

    err := db.Init(dbString)

    if err != nil {

        log.Fatal("Failed to create db connection:", err.Error())

    }


    f, err := os.OpenFile("text.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)

    if err != nil {

        log.Fatalf("ERROR: error opening file: %v", err)

    }

  defer f.Close()


    queryText := "select * from stackOverflow"

    rows, err := db.db.Query(queryText)

    if err != nil {

        log.Fatal(err)

    }


    columns, err := rows.Columns()

    if err != nil {

        log.Fatal(err)

    }


    count := len(columns)

    values := make([]interface{}, count)

    scanArgs := make([]interface{}, count)

    for i := range values {

        scanArgs[i] = &values[i]

    }


    for rows.Next() {

        err := rows.Scan(scanArgs...)

        if err != nil {

            log.Fatal(err)

        }


        concat := make([]string, 0)

        for i, _ := range columns {

            v := values[i]


            b, ok := v.([]byte)

            if ok {

                concat = append(concat, string(b))

            } else {

                concat = append(concat, fmt.Sprintf("%v", v))

            }

        }

        line := strings.Join(concat, " | ")

        fmt.Println(line)

        _, err = f.Write([]byte(fmt.Sprintf("%s\n", line)))

        if err != nil {

            log.Fatal(err)

        }


    }


    return

}



查看完整回答
反對 回復 2022-10-17
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

首先創建 struct object called Person,然后定義一個String函數來做你想做的事


package main


import (

    "encoding/json"

    "strconv"

)


type Person struct {

    Name     string `json:"name"`

    LastName string `json:"last_name"`

    IdNumber int    `json:"id_number"`

}


// Convert to csv separated by " | "

func (p Person) String() string {

    return p.Name + " | " + p.LastName + " | " + strconv.Itoa(p.IdNumber)

}


func main() {


    // json data

    jsonData := map[string]interface{}{

        "name":      "luis",

        "last_name": "gomez",

        "id_number": 87846516,

    }


    person := Person{}

    jsonDataByte, _ := json.Marshal(jsonData)

    json.Unmarshal(jsonDataByte, &person)


    // print person

    println(person.String())

}

答案是:


luis | gomez | 87846516


查看完整回答
反對 回復 2022-10-17
  • 2 回答
  • 0 關注
  • 189 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號