- Home /
Problem parsing a file by group of lines
I'm having a problem while trying to parse a an external text file. I'm trying to to add to a List a group of lines then I need to reset the list and add the next group of lines, this is used to generate chunks of meshes.
This is the actual unction with all the parsing:
static public EXMap GetMapData (string fPath, Transform parent) {
string data = NMPath.GetExistingPath(fPath);
List<EXCell> vCell = new List<EXCell>();
string material = "";
int sector = 0;
EXMap map = new EXMap();
GameObject o = new GameObject ("EXMAP");
o.transform.parent = parent;
if (!File.Exists (data)) return map;
using (StreamReader sr = new StreamReader(data)) {
string line;
while ((line = sr.ReadLine()) != null) {
string[] nLine = line.Split('=');
string[] vLine = nLine[1].Split (',');
if(line.Contains("name"))
map.mapName = nLine[1].Trim (' ');
if(line.Contains("material"))
material = nLine[1].Trim (' ');
if(line.Contains("sector"))
sector = int.Parse(nLine[1].Trim (' '));
for(int i = 0; i < sector; i++) {
if(line.Contains("cell" + i))
vCell.Add(EXParse.ParseEXCellData(vLine));
BuildSectorData(vCell.ToArray(), material, o.transform);
vCell.Clear();
}
}
sr.Close();
}
return map;
}
The problem is on the part:
for(int i = 0; i < sector; i++) {
if(line.Contains("cell" + i))
vCell.Add(EXParse.ParseEXCellData(vLine));
BuildSectorData(vCell.ToArray(), material, o.transform);
vCell.Clear();
}
Now, the sector variable is just a int of how many sectors the map have, used just as index to process each group of lines, what I would like to do is to hang the line.Contains("cell" + i to fill out all the lines with that name inside the vCell List, and then proceed to the BuildSectorData funcion.
Obiviously the actual code will add just one line, add to the List and run immediatly the function.
This is how the map text file is structured:
name = testMap
music = Audio/Music/track00.ogg
material = Materials/interiorTest_MAT.nmt
sector = 2
cell0 = 0,0,1,1,0,1,29,29
cell0 = 0,-2,0,0,1,1,29,29
cell0 = 2,-2,1,1,1,0,29,29
cell1 = 4,-4,1,1,0,1,29,29
cell1 = 4,-6,0,0,1,1,29,29
cell1 = 8,-8,1,1,1,0,29,29
So just to recap I just want to fill all the cell + index lines in the list, then Clear the list and proceed to the next bunch of cells. I know I could do it with fixed loops, but since the maps will be dynamic in the content I can't predict how many cells could be there for each bunch.
Your answer
Follow this Question
Related Questions
C# How to read and cache text file data? 1 Answer
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Loading Scripts through System.IO 1 Answer
How do you debug a System.IO exception Unity won't load in WebPlayer? 2 Answers