How to read a data file using golang?












0














I have a txt file :



2
Data 5 1.32
DataSecond 4 5.41
4
...


And so on. How to read the first line to know the count and then go on spliting the other lines to get individual parameters? I tried doing as follows, but it is obviously wrong.



f, err := os.Open("DATA.txt")
check(err)
s := bufio.NewScanner(f)
for s.Scan() {
line := s.Text()
count, err := strconv.Atoi(line)
check(err)
for i := 0; i < count; i++ {
testArray := strings.Fields(s.Text())
for _, v := range testArray {
fmt.Println(v)
}
}
}









share|improve this question
























  • Possible duplicate of Golang: How to read a text file?
    – Shudipta Sharma
    Nov 23 '18 at 16:28
















0














I have a txt file :



2
Data 5 1.32
DataSecond 4 5.41
4
...


And so on. How to read the first line to know the count and then go on spliting the other lines to get individual parameters? I tried doing as follows, but it is obviously wrong.



f, err := os.Open("DATA.txt")
check(err)
s := bufio.NewScanner(f)
for s.Scan() {
line := s.Text()
count, err := strconv.Atoi(line)
check(err)
for i := 0; i < count; i++ {
testArray := strings.Fields(s.Text())
for _, v := range testArray {
fmt.Println(v)
}
}
}









share|improve this question
























  • Possible duplicate of Golang: How to read a text file?
    – Shudipta Sharma
    Nov 23 '18 at 16:28














0












0








0







I have a txt file :



2
Data 5 1.32
DataSecond 4 5.41
4
...


And so on. How to read the first line to know the count and then go on spliting the other lines to get individual parameters? I tried doing as follows, but it is obviously wrong.



f, err := os.Open("DATA.txt")
check(err)
s := bufio.NewScanner(f)
for s.Scan() {
line := s.Text()
count, err := strconv.Atoi(line)
check(err)
for i := 0; i < count; i++ {
testArray := strings.Fields(s.Text())
for _, v := range testArray {
fmt.Println(v)
}
}
}









share|improve this question















I have a txt file :



2
Data 5 1.32
DataSecond 4 5.41
4
...


And so on. How to read the first line to know the count and then go on spliting the other lines to get individual parameters? I tried doing as follows, but it is obviously wrong.



f, err := os.Open("DATA.txt")
check(err)
s := bufio.NewScanner(f)
for s.Scan() {
line := s.Text()
count, err := strconv.Atoi(line)
check(err)
for i := 0; i < count; i++ {
testArray := strings.Fields(s.Text())
for _, v := range testArray {
fmt.Println(v)
}
}
}






go






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 23 '18 at 12:21









ssemilla

3,077424




3,077424










asked Nov 23 '18 at 12:12









RičardasRičardas

32




32












  • Possible duplicate of Golang: How to read a text file?
    – Shudipta Sharma
    Nov 23 '18 at 16:28


















  • Possible duplicate of Golang: How to read a text file?
    – Shudipta Sharma
    Nov 23 '18 at 16:28
















Possible duplicate of Golang: How to read a text file?
– Shudipta Sharma
Nov 23 '18 at 16:28




Possible duplicate of Golang: How to read a text file?
– Shudipta Sharma
Nov 23 '18 at 16:28












2 Answers
2






active

oldest

votes


















0














You could do something like this, read the single lines into a count int
and use it as a test. If count is > 0 then use sscanf to get the other values



func main() {
f, err := os.Open("DATA.txt")
check(err)
s := bufio.NewScanner(f)
count := 0
for s.Scan() {
line := s.Text()
if count < 1 {
count, err = strconv.Atoi(line)
check(err)
continue
}
count--
var tag string
var n int
var f float64
fmt.Sscanf(line, "%s %d %f", &tag, &n, &f)
// not sure what you really wnant to do with the data!
fmt.Println(n, f, tag)
}
}





share|improve this answer





























    1














    You just forgot to Scan() inside the inner loop.



    f, err := os.Open("DATA.txt")
    check(err)
    s := bufio.NewScanner(f)
    for s.Scan() {
    line := s.Text()
    count, err := strconv.Atoi(line)
    check(err)
    for i := 0; i < count && s.Scan(); i++ {
    testArray := strings.Fields(s.Text())
    for _, v := range testArray {
    fmt.Println(v)
    }
    }
    }





    share|improve this answer





















      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53446514%2fhow-to-read-a-data-file-using-golang%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      0














      You could do something like this, read the single lines into a count int
      and use it as a test. If count is > 0 then use sscanf to get the other values



      func main() {
      f, err := os.Open("DATA.txt")
      check(err)
      s := bufio.NewScanner(f)
      count := 0
      for s.Scan() {
      line := s.Text()
      if count < 1 {
      count, err = strconv.Atoi(line)
      check(err)
      continue
      }
      count--
      var tag string
      var n int
      var f float64
      fmt.Sscanf(line, "%s %d %f", &tag, &n, &f)
      // not sure what you really wnant to do with the data!
      fmt.Println(n, f, tag)
      }
      }





      share|improve this answer


























        0














        You could do something like this, read the single lines into a count int
        and use it as a test. If count is > 0 then use sscanf to get the other values



        func main() {
        f, err := os.Open("DATA.txt")
        check(err)
        s := bufio.NewScanner(f)
        count := 0
        for s.Scan() {
        line := s.Text()
        if count < 1 {
        count, err = strconv.Atoi(line)
        check(err)
        continue
        }
        count--
        var tag string
        var n int
        var f float64
        fmt.Sscanf(line, "%s %d %f", &tag, &n, &f)
        // not sure what you really wnant to do with the data!
        fmt.Println(n, f, tag)
        }
        }





        share|improve this answer
























          0












          0








          0






          You could do something like this, read the single lines into a count int
          and use it as a test. If count is > 0 then use sscanf to get the other values



          func main() {
          f, err := os.Open("DATA.txt")
          check(err)
          s := bufio.NewScanner(f)
          count := 0
          for s.Scan() {
          line := s.Text()
          if count < 1 {
          count, err = strconv.Atoi(line)
          check(err)
          continue
          }
          count--
          var tag string
          var n int
          var f float64
          fmt.Sscanf(line, "%s %d %f", &tag, &n, &f)
          // not sure what you really wnant to do with the data!
          fmt.Println(n, f, tag)
          }
          }





          share|improve this answer












          You could do something like this, read the single lines into a count int
          and use it as a test. If count is > 0 then use sscanf to get the other values



          func main() {
          f, err := os.Open("DATA.txt")
          check(err)
          s := bufio.NewScanner(f)
          count := 0
          for s.Scan() {
          line := s.Text()
          if count < 1 {
          count, err = strconv.Atoi(line)
          check(err)
          continue
          }
          count--
          var tag string
          var n int
          var f float64
          fmt.Sscanf(line, "%s %d %f", &tag, &n, &f)
          // not sure what you really wnant to do with the data!
          fmt.Println(n, f, tag)
          }
          }






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 23 '18 at 12:57









          VorsprungVorsprung

          22.4k31944




          22.4k31944

























              1














              You just forgot to Scan() inside the inner loop.



              f, err := os.Open("DATA.txt")
              check(err)
              s := bufio.NewScanner(f)
              for s.Scan() {
              line := s.Text()
              count, err := strconv.Atoi(line)
              check(err)
              for i := 0; i < count && s.Scan(); i++ {
              testArray := strings.Fields(s.Text())
              for _, v := range testArray {
              fmt.Println(v)
              }
              }
              }





              share|improve this answer


























                1














                You just forgot to Scan() inside the inner loop.



                f, err := os.Open("DATA.txt")
                check(err)
                s := bufio.NewScanner(f)
                for s.Scan() {
                line := s.Text()
                count, err := strconv.Atoi(line)
                check(err)
                for i := 0; i < count && s.Scan(); i++ {
                testArray := strings.Fields(s.Text())
                for _, v := range testArray {
                fmt.Println(v)
                }
                }
                }





                share|improve this answer
























                  1












                  1








                  1






                  You just forgot to Scan() inside the inner loop.



                  f, err := os.Open("DATA.txt")
                  check(err)
                  s := bufio.NewScanner(f)
                  for s.Scan() {
                  line := s.Text()
                  count, err := strconv.Atoi(line)
                  check(err)
                  for i := 0; i < count && s.Scan(); i++ {
                  testArray := strings.Fields(s.Text())
                  for _, v := range testArray {
                  fmt.Println(v)
                  }
                  }
                  }





                  share|improve this answer












                  You just forgot to Scan() inside the inner loop.



                  f, err := os.Open("DATA.txt")
                  check(err)
                  s := bufio.NewScanner(f)
                  for s.Scan() {
                  line := s.Text()
                  count, err := strconv.Atoi(line)
                  check(err)
                  for i := 0; i < count && s.Scan(); i++ {
                  testArray := strings.Fields(s.Text())
                  for _, v := range testArray {
                  fmt.Println(v)
                  }
                  }
                  }






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 23 '18 at 12:36









                  ssemillassemilla

                  3,077424




                  3,077424






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.





                      Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                      Please pay close attention to the following guidance:


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53446514%2fhow-to-read-a-data-file-using-golang%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      What visual should I use to simply compare current year value vs last year in Power BI desktop

                      Alexandru Averescu

                      Trompette piccolo