0

ファイルの内容を読み取り、そこからデータを抽出することになっているプログラムに取り組んでいます。fmt.Fscanf() を使用してコンテンツを 1 行ずつスキャンしようとしましたが、何らかの理由で正しく動作しません。行全体が最初の文字列引数のみにスキャンされます。ここで何が間違っていますか?

値が空白で区切られていないため、機能していないと思いますが、解決策が見つかりませんでした。あなたの助けと専門知識をありがとう!

20220105|AA|1051302|4323|3132468|B,Q,N
20220105|AAA|61|0|62|Q
20220105|AAAU|19404|0|57137|Q,N
20220105|AAC|35524|0|39861|Q,N
20220105|AAC/WS|1180|0|2000|N
20220105|AACG|1805439|32577|3484265|B,Q,N
func main() {
  file, err := os.Open("./CNMSshvol20220105.txt")
  if err != nil{
    log.Fatal(err)
  }
  defer file.Close()

  var m map[string][]int
  m = make(map[string][]int)

  for{
    row := ""
    date := ""
    symbol := ""
    shortVolume := 0
    shortExemptVolume := 0
    totalVolume := 0
    markets := ""

    //Date|Symbol|ShortVolume|ShortExemptVolume|TotalVolume|Market
    var n int
    n, err := fmt.Fscanf(file, "%s\n", &row)
    fmt.Sscanf(row, "%s|%s|%d|%d|%d|%s", &date, &symbol, &shortVolume, &shortExemptVolume, &totalVolume,&markets)
    fmt.Println(date)
    if n == 0 || err != nil{
      log.Fatalf("Fscanf: %v\n", err)
      break
    }
    fmt.Println(symbol, shortVolume, shortExemptVolume, totalVolume)
    m[strings.ToLower(symbol)] = append(m[strings.ToLower(symbol)],shortVolume)
    m[strings.ToLower(symbol)] = append(m[strings.ToLower(symbol)],shortExemptVolume)
    m[strings.ToLower(symbol)] = append(m[strings.ToLower(symbol)],totalVolume)

  }

  //Retrieve values if the key exists
  for{
    fmt.Println("\n\n\n\nEnter ticker to retrieve short volume information.")
    var s string
    fmt.Scanf("%s",&s)
    data, ok := m[strings.ToLower(s)]
    if !ok{
      fmt.Println("Not Found.")
      continue
    }
    for _, value := range data{
      fmt.Println(value)
    }
  }


}```

4

1 に答える 1