0

csv ファイルからデータの文字列を読み取り、そのデータをカスタム オブジェクトのリストに解析しようとしています。私が抱えている主な問題は、ループ内でデータを正しいデータ型に変換することです。

ここに私のカスタムオブジェクトがあります:

type yahooInfoObj struct {
    date time.Time
    open float32
    high float32
    low float32
    close float32
    volume int
    adjClose float32
}

データを取得して解析を試みる関数は次のとおりです。

func getSingleCompanyData(search searchObj) []yahooInfoObj {
    searchQuery := buildYahooFinanceDataQueryString(search)
    data := getRequest(searchQuery)

    r := csv.NewReader(strings.NewReader(data))
    var stats []yahooInfoObj

    // Read csv file
    result, _ := r.ReadAll()

    //loop through each returned stat (line)
    for i := range result {
        //skip the first entry due to column names being returned
        if i != 0{
            stat := result[i]
            stats = append(stats, yahooInfoObj{stat[0],strconv.ParseFloat(stat[1],32),strconv.ParseFloat(stat[2],32),strconv.ParseFloat(stat[3],32),strconv.ParseFloat(stat[4],32),strconv.Atoi(stat[5]),strconv.ParseFloat(stat[6],32)})
        }
    }

    return stats
}

以下は、返されて data 変数に配置されるサンプル データの一部です。

Date,Open,High,Low,Close,Volume,Adj Close
2010-12-31,31.219999,31.33,30.93,31.299999,11716300,29.517661
2010-12-30,31.450001,31.58,31.209999,31.290001,12989400,29.508232
2010-12-29,31.530001,31.690001,31.42,31.50,9769000,29.706273
2010-12-28,31.66,31.76,31.41,31.57,9736000,29.772287

私はgo言語に慣れていないので、アドバイスをいただければ幸いです。前もって感謝します!

4

1 に答える 1

1

すぐに気付くことがいくつかあります。

  • time.Time構造体に送信するオブジェクトを使用していませんyahooInfoObj。文字列を送信しています

  • 「単一値コンテキスト」で複数の値を返す関数を呼び出しています。これは、2 番目の値を無視することを期待しているだけであることを意味しますが、Go ではこれはコーディングのエラーです。これらの値を明示的に設定する必要があります。

  • 複数のエラーをチェックしていません。常にエラーを確認してください。将来の「落とし穴」を防ぐことができます。

完璧ではありませんが、一見機能している遊び場があります: https://play.golang.org/p/idQFFVjS-X

于 2016-02-21T05:24:33.953 に答える