- 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