Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. Reading a specific line from txt file

Reading a specific line from txt file

Scheduled Pinned Locked Moved C#
questiontoolstutorial
12 Posts 5 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Casper Hansen

    Hello. I have a text file that looks like this: 0 1 "Bull Fighter" 6 100 0 16 20 6 0 28 6 3 0 1 5 400 1600 10 2 130 10 6 0 0 0 0 0 1 1 "Hound" 9 140 0 22 27 9 0 39 9 3 0 1 5 400 1600 10 2 130 10 6 0 0 0 0 0 2 1 "Budge Dragon" 4 60 0 10 13 3 0 18 3 3 0 1 4 400 2000 10 2 120 10 6 0 0 0 0 0 It is called monster.txt The first value is a id which I also use in my script. Lets say I have the id 3, this would be "Spider" since the first number of "Spider" is 3 What is the best way to read the monster.txt file for the id and retrive the name? (Name = "Spider", id = 3) (As my example above)

    D Offline
    D Offline
    Dave Sexton
    wrote on last edited by
    #3

    Depending on how often you need to access this information you'd probably be better off storing this information in a DataTable (which you could create at runtime). You can then use the Rows property of the DataTable object to retrieve your row at the given index. I also agree with the previous poster that you should use a different char for separating values.

    But fortunately we have the nanny-state politicians who can step in to protect us poor stupid consumers, most of whom would not know a JVM from a frozen chicken. Bruce Pierson
    Because programming is an art, not a science. Marc Clifton

    1 Reply Last reply
    0
    • X Xmen Real

      Split() will work but you have space in name too, i will suggest you to convert your line like this, if possible : 0~1~"Bull Fighter"~6~100~0~16~20~6~0~28~6~3~0~1~5~400~1600~10~2~130~10~6~0~0~0~0~0 then you can use Split('~') hope this will help

      TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87??6?N8?BcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKSQXUFYK[M`UKs*$GwU#(QDXBER@CBN% Rs0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-i?TV.C\y -------------------------------------------------------- 128 bit encrypted signature, crack if you can

      C Offline
      C Offline
      Casper Hansen
      wrote on last edited by
      #4

      Its not a problem getting the monster name. When I just have the line, it is no problem. The problem is reading the file and accessing the line through a id. Because it would be pretty silly to read the whole file just for 1 line.

      G P X 3 Replies Last reply
      0
      • C Casper Hansen

        Its not a problem getting the monster name. When I just have the line, it is no problem. The problem is reading the file and accessing the line through a id. Because it would be pretty silly to read the whole file just for 1 line.

        G Offline
        G Offline
        Gareth H
        wrote on last edited by
        #5

        Casper Hansen, You cannot read only 1 line of a text file. You need to get the whole file, and then search for your ID. Regards, Gareth.

        1 Reply Last reply
        0
        • X Xmen Real

          Split() will work but you have space in name too, i will suggest you to convert your line like this, if possible : 0~1~"Bull Fighter"~6~100~0~16~20~6~0~28~6~3~0~1~5~400~1600~10~2~130~10~6~0~0~0~0~0 then you can use Split('~') hope this will help

          TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87??6?N8?BcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKSQXUFYK[M`UKs*$GwU#(QDXBER@CBN% Rs0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-i?TV.C\y -------------------------------------------------------- 128 bit encrypted signature, crack if you can

          P Offline
          P Offline
          PIEBALDconsult
          wrote on last edited by
          #6

          That's why Split should have the ability to honor quote characters... as mine does.

          1 Reply Last reply
          0
          • C Casper Hansen

            Its not a problem getting the monster name. When I just have the line, it is no problem. The problem is reading the file and accessing the line through a id. Because it would be pretty silly to read the whole file just for 1 line.

            P Offline
            P Offline
            PIEBALDconsult
            wrote on last edited by
            #7

            As presented you have to read the entire file. Or use an index in a separate file. Or alter the format somehow. For instance each line could begin with the length of the line. Personally, I suggest using XML, but that's just me.

            1 Reply Last reply
            0
            • C Casper Hansen

              Hello. I have a text file that looks like this: 0 1 "Bull Fighter" 6 100 0 16 20 6 0 28 6 3 0 1 5 400 1600 10 2 130 10 6 0 0 0 0 0 1 1 "Hound" 9 140 0 22 27 9 0 39 9 3 0 1 5 400 1600 10 2 130 10 6 0 0 0 0 0 2 1 "Budge Dragon" 4 60 0 10 13 3 0 18 3 3 0 1 4 400 2000 10 2 120 10 6 0 0 0 0 0 It is called monster.txt The first value is a id which I also use in my script. Lets say I have the id 3, this would be "Spider" since the first number of "Spider" is 3 What is the best way to read the monster.txt file for the id and retrive the name? (Name = "Spider", id = 3) (As my example above)

              C Offline
              C Offline
              Casper Hansen
              wrote on last edited by
              #8

              I just used private void findMonster(int monsterId) { StreamReader sr = new StreamReader(@monsterLocation); int searchId = monsterId; int actualId = 0; string name = "(Not found)"; string[] details = null; string line = null; while ((line = sr.ReadLine()) != null) { line = line.Trim(); if (line == "") continue; details = line.Split('\t'); actualId = int.Parse(details[0]); if (actualId == searchId) { name = details[2].Replace("\"", ""); break; } } sr.Close(); txtMonster.Text = name; } Dont know if its the best way, but it works.. As you guys said I should use some other database form then txt, but the game im devolping this software to is using txt files so cant rellay change it X|

              P 1 Reply Last reply
              0
              • C Casper Hansen

                I just used private void findMonster(int monsterId) { StreamReader sr = new StreamReader(@monsterLocation); int searchId = monsterId; int actualId = 0; string name = "(Not found)"; string[] details = null; string line = null; while ((line = sr.ReadLine()) != null) { line = line.Trim(); if (line == "") continue; details = line.Split('\t'); actualId = int.Parse(details[0]); if (actualId == searchId) { name = details[2].Replace("\"", ""); break; } } sr.Close(); txtMonster.Text = name; } Dont know if its the best way, but it works.. As you guys said I should use some other database form then txt, but the game im devolping this software to is using txt files so cant rellay change it X|

                P Offline
                P Offline
                PIEBALDconsult
                wrote on last edited by
                #9

                XML is text. CSV is text.

                C 1 Reply Last reply
                0
                • C Casper Hansen

                  Its not a problem getting the monster name. When I just have the line, it is no problem. The problem is reading the file and accessing the line through a id. Because it would be pretty silly to read the whole file just for 1 line.

                  X Offline
                  X Offline
                  Xmen Real
                  wrote on last edited by
                  #10

                  read all lines from text then do your operation, to read all line here is the shortest ways :

                  string[] lines = File.ReadAllLines( <FILEPATH> );

                  hope this will help

                  TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87??6?N8?BcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKSQXUFYK[M`UKs*$GwU#(QDXBER@CBN% Rs0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-i?TV.C\y -------------------------------------------------------- 128 bit encrypted signature, crack if you can

                  1 Reply Last reply
                  0
                  • P PIEBALDconsult

                    XML is text. CSV is text.

                    C Offline
                    C Offline
                    Casper Hansen
                    wrote on last edited by
                    #11

                    I said txt not text :)

                    P 1 Reply Last reply
                    0
                    • C Casper Hansen

                      I said txt not text :)

                      P Offline
                      P Offline
                      PIEBALDconsult
                      wrote on last edited by
                      #12

                      Yeah, so? "txt" is not a reserved extension for some special format. Likewise the extension of your file could just as easily be "dat" or "casper". I merely meant to suggest that you not use the format shown if at all possible.

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups