Click to See Complete Forum and Search --> : Saving text manipulated data


Dumpen
May 2nd, 2008, 11:12 PM
Hello.

I have a small question/problem.

I have this text file:
// Test
0
0 0 0 15 15 7 // 0
end

1
1 1 30 25 25 240 240 -1 5 // 1
end


I read it into an array in C#, but in my array I read it in as
0 0 0 15 15 7 // 0
1 1 30 25 25 240 240 -1 5 // 1

Since this is a easyer way of manipulating with the data, but now I want to save the data to the text file.
I know the line number of my array, but that does not add up with the orginal file since I stripped som things

So my question is: How do I save the manipulated data so it fits with the orginal data?

My code looks like this:
string[] SaveMonsterLines = File.ReadAllLines(XMLfileLocation);
SaveMonsterLines[linenumber] = "1 1 30 25 25 240 240 -1 5 // 1";
File.WriteAllLines(@"D:/output.txt", SaveMonsterLines);

If you dont understand my question/problem, please speak up :)

TheCPUWizard
May 2nd, 2008, 11:37 PM
1) Please use code tags.
2) Please post buildable code (attach datafile) - unless you are asking about a compiler error
3) Please use code tags
4) Plrease make sure your sample it minimal yet complete
5) Please use code tags.

Good Luck. :wave:

(ps: Please use code tags ;) )

Dumpen
May 3rd, 2008, 08:38 AM
All right..

I will try to explain again

I have the array MonsterDataArray which contains the data from the text file

The array looks like this:
0 0 0 15 15 7 // 0
1 1 30 25 25 240 240 -1 5 // 1


And both of the lines above has a line number in the array which is 0 and 1


Now I changed something in my array. Lets say I changed line number 0

I changed it from:
0 0 0 15 15 7 // 0

to:
4 7 2 30 45 9 // bleh


Now the line number 0 is updated in the MonsterDataArray, but it is not updated in the text file

This is where my problem is.. I dont know how to save the changed line number 0 from my MonsterDataArray to my text file because if I use my current code the line number from my array doesnt match up with my text file since I removed some things

I hope this helps

And as for the buildable code, there are much code in the program so I think it will only confuse you further

TheCPUWizard
May 3rd, 2008, 10:10 AM
And as for the buildable code, there are much code in the program so I think it will only confuse you further

Then you have NOT done the first step in debugging ANY problem.

When a "bug" is found, the FIRST step is to create a "minimal yet complete" reproduction.

As an example, simply create a new program with the absolute fewest instructions that reproduce the problem.

70% of the time you will find that the bug is not where you thought it was
20% of the time you will slap yourself because the bug is obvjous when all the clutter is removed
9% of the time a few minutes with the debugger in the minimal code will reveal the cause
...and....
1% of the time you will actually have to post the question (along with the repro) on a forum.

[These numbers are approximate, but are reasonably correct based on my experiences with hundreds of developers]

Dumpen
May 3rd, 2008, 08:46 PM
Now I got the saving text working by not removing any data from the text file so my array looks like this:
// Test
0
0 0 0 15 15 7 // 0
end

1
1 1 30 25 25 240 240 -1 5 // 1
end

But now I ran into another problem

I have a image where I draw ellipses on with the coordinates from my text file (X: 15 Y: 15 and the 2: X: 25, Y: 25). It triggers on the paint event from the image

I also have a mouse down event on my image

I save all my ellipses in a list called
List<Rectangle> mapRectangleList = new List<Rectangle>();

When I do mouse down I see if the mouse is over a ellipse. If it is it jumps to a specific line in my MonsterDataArray, but the problem is when I save all my ellipses in the list I dont take end, 0, // and the other things from my text with. I only take:
1 0 30 25 25 240 240 -1 5 // Red Dragon
2 0 30 35 35 185 132 -1 10 // Golden Titan

So when I jump to specific line in my array the line doesnt match up

Yeah im kinda lost here..

Here is the mouse down part:
// Getting cursor position
Point p = mapImage.PointToClient(Cursor.Position);

for (int i = 0; i < mapRectangleList.Count; i++)
{
if (mapRectangleList[i].Contains(p))
{
ellipseNum = i;
break;
}
}
// If ellipsenum is over a ellipse
if (ellipseNum > -1)
{
MessageBox.Show(Convert.ToString(ellipseNum));
displayLine(ellipseNum);
}
else
{
// Else show alert
MessageBox.Show("Not currently over any ellipse");
}

Paint event:
// Open the data file (msbr = monsterSetBaseRead)
StreamReader msbr = new StreamReader(new FileStream(@XMLmonsterSetBaseLocation, FileMode.Open));

// Reading all data
while ((MapMonsterSetBaseData = msbr.ReadLine()) != null)
{
// Splitting data into TxtPiecesMap[]
String[] TxtPiecesMap = MapMonsterSetBaseData.Split('\t');

// Checking if data is a correct monster
checkIf(MapMonsterSetBaseData);

// If it is then continue
if (checkIfStatus == true)
{
// Getting the x and y cord
MapXCord = Convert.ToInt16(TxtPiecesMap[3]) * 2;
MapYCord = Convert.ToInt16(TxtPiecesMap[4]) * 2;

// Creating grapic
Graphics g = e.Graphics;

// Creating rectangle with cords from coordinates
Rectangle r = new Rectangle(MapXCord, MapYCord, 6, 6);

// Drawing ellipse on map
g.DrawEllipse(Pens.Gold, r);

// Adding data for ToolTips and Rectangles lists
mapRectangleList.Add(r);
}

And my checkif
private void checkIf(string data)
{
// If monster string is correct
if (data != "" && data.Length != 3 && data != "end" && data.Substring(0, 1) != "/" && data.Length != 1)
{
// Passes
checkIfStatus = true;
}
else
{
// Failed
checkIfStatus = false;
}
}

Dont know if this makes any sense

There might be an easier soloution, but I dont know it

Its allmost the same problem as before, but in a diffrent context