- Home /
Code explanation - C#
continuation of this
Hi. In my last question (link) I was provided a piece of code that can read text documents. It is excactly what I need for my project, but the comments on the code wasnt really that descriptive (no offense @Drakestar). So I was wondering if there was anyone that would help me out and explain me what variables I need to edit to read the (example:) 4th line of a file located at "C:/MyGame/data/document.txt"
-thanks :)
EDIT: here's the code:
 using System.Text;
 using System.IO;  
 
 private bool Load(string fileName)
 {
     // Handle any problems that might arise when reading the text
     try
     {
         string line;
         // Create a new StreamReader, tell it which file to read and what encoding the file
         // was saved as
         StreamReader theReader = new StreamReader(fileName, Encoding.Default);
 
         // Immediately clean up the reader after this block of code is done.
         // You generally use the "using" statement for potentially memory-intensive objects
         // instead of relying on garbage collection.
         // (Do not confuse this with the using directive for namespace at the 
         // beginning of a class!)
         using (theReader)
         {
             // While there's lines left in the text file, do this:
             do
             {
                 line = theReader.ReadLine();
 
                 if (line != null)
                 {
                     // Do whatever you need to do with the text line, it's a string now
                     // In this example, I split it into arguments based on comma
                     // deliniators, then send that array to DoStuff()
                     string[] entries = line.Split(',');
                     if (entries.Length > 0)
                         DoStuff(entries);
                 }
             }
             while (line != null);
 
             // Done reading, close the reader and return true to broadcast success    
             theReader.Close();
             return true;
             }
         }
 
         // If anything broke in the try block, we throw an exception with information
         // on what didn't work
         catch (Exception e)
         {
             Console.WriteLine("{0}\n", e.Message);
             return false;
         }
     }
 }
So what you have there is basically something that will process the file line by line - DoStuff will be called for each line of the file. If you want effectively random access you should do something slightly different.
thanks, but I actually asked for where to edit my file path into and how I could assign the read line to a varible (an interger or string)
Answer by whydoidoit · Jul 07, 2012 at 10:39 AM
You could read the whole file into a list and then you could access any line you like:
   import System.Collections.Generic;
  import System.Linq;
   import System.IO;
   var fileLines : List.<String>;
   function ReadFile() {
      var sr = File.OpenText("whatever.txt");
      fileLines = sr.ReadToEnd().Split("\n"[0]).ToList();
      sr.Close();
   }
Now you have a list of lines that you can insert into, get a specific line from - whatever. If you want to write them back out you can just do:
  var wholeFileText = String.Join("\n", fileLines.ToArray());
To get line 4 you just do fileLines[3].
I dont mean to be rude. But please write in C# :) I dont know javascript that well yet...
Sure
  using System.Collections.Generic;
  using System.Linq;
  using System.IO;
  public List<String> fileLines;
  
  public void ReadFile(string filename)
  {
       var sr = File.OpenText(filename);
       fileLines = sr.ReadToEnd().Split('\n').ToList();
       sr.Close();
  }
If you are using a CSV file however:
  using System.Collections.Generic;
  using System.Linq;
  using System.IO;
  public List<List<String>> filedata;
  
  public void ReadFile(string filename)
  {
       var sr = File.OpenText(filename);
       filedata = sr.ReadToEnd().Split('\n').Select(s=>s.Split(',').ToList()).ToList();
       sr.Close();
  }
This will give you the ability to access the data by row and column:
   var myData = filedata[4][3]; // Row 5 column 4
thanks :) thats all good. But where do I put the "C:/$$anonymous$$yGame/data/document.txt" ?
You pass it as the filename:
    void Start() 
    {
            ReadFile(yourFileNameHere);
    }
Bear in $$anonymous$$d that your file won't be there during a build. You should ins$$anonymous$$d do this differently as a text Resource Asset.
I already have a script that creates a text file :) Thanks :)
Your answer
 
 
             Follow this Question
Related Questions
Distribute terrain in zones 3 Answers
Multiple Cars not working 1 Answer
Regarding reset the state to the first time we start to play 0 Answers
Error: CS0200 | Read only array? 1 Answer
Should I use c# or Unityscript? 1 Answer
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                