4

プロジェクト オイラーの問題をいくつか解くことで、Go プログラミング言語を学んでいます。[問題 13] ( http://projecteuler.net/problem=13 ) に取り組んでいます。これには、100 行の 50 桁の数字を含む外部ファイルが含まれています。私の質問は次のとおりです。このファイルを Go プログラムに読み込んで操作するにはどうすればよいですか? Goにはreadlines機能がありますか? 私は io および ioutil パッケージについて読みましたが、ファイルを読み込んで印刷することしか思いつきません。ただし、ファイルの操作方法がわかりません... 変数に割り当てることはできますか? readlines機能などはありますか...

どんな助けでも感謝されます。

これが私がこれまでに持っているものです:

package main

import "fmt"
import "io/ioutil"

func main() {
        fmt.Println(ioutil.ReadFile("one-hundred_50.txt"))
}
4

3 に答える 3

3

ファイルを1行ずつ読み取る方法はいくつかありますが(ここでSOで検索すると例があります)、実際にはioutil.ReadFileから始めるとよいでしょう。確かにそれを変数に割り当てることができます。ReadFileの関数シグネチャを見て、バイトスライスとエラーの両方を返す方法を確認してください。両方を割り当てます。エラーがゼロであることを確認してください。何が問題なのかがわかるように、エラーがnilでない場合はエラーを出力します。次に、変数にバイトを入れたら、それを行で吐き出してみてください。bytes.Splitを試してください。または、より簡単に、文字列に変換してstrings.Splitを使用してください。

于 2012-05-24T23:28:07.350 に答える
1

bufioをチェックしてください。 この回答では、これを使用してファイル全体をメモリに読み込みます。

このオイラー問題には、ReadStringを使用できます。

package main

import (
  "os"
  "bufio"
  "fmt"
)

func main() {
  r := bufio.NewReader(os.Stdin)
  line, err := r.ReadString('\n')
  for i := 1; err == nil; i++ {
    fmt.Printf("Line %d: %s", i, line)
    line, err = r.ReadString('\n')
  }
}

使用するには:

go run solution.go < inputfile
于 2012-05-25T00:32:29.667 に答える