Link to home
Start Free TrialLog in
Avatar of Abacus IT
Abacus ITFlag for United States of America

asked on

C# Array ignoring last entry in the array

I have this piece of code that reads a text file, looks for certain values in each line, then increments some integer variables for success or failures. Right now it currently ignores the first line in the file, and now I need it to ignore the last line in the file also. I'm sure it's a simple fix, but the answer has been eluding me. I read the whole file into a variable, then split the file into separate lines. Then I split each line on the commas, to allow the code to search for the specified string.


>Exchange Zone removed by a3
public string ReadFileBoardResp(string fileName)
        {
            try
            {

                StreamReader sr = new StreamReader(fileName);
                boardLine = sr.ReadToEnd();
                string Contents = boardLine;
                string[] lines = Contents.Split(char.Parse("\r"));
                int x = 0;
                successCount = 0;
                failureCount = 0;
                while (lines[x].ToString() != "\n")
                {
                    string[] parts = lines[x].Split(char.Parse(","));
                    x++;
                    boardRespID = Contents.Substring(11, 7);
                    if (x != 1)
                    {
                        if (parts[4].ToString() == "\"SUCCESSFUL in MAP\"")
                        {
                            successCount++;
                        }
                        else
                        {
                            failureCount++;
                        }
                    }
                }
                sr.Close();
                 
            }
            catch (Exception e)
            {
                Add.AddToFile(e.Message.ToString());

            } 
            return boardLine; 
        }

Open in new window

Avatar of Guy Hengel [angelIII / a3]
Guy Hengel [angelIII / a3]
Flag of Luxembourg image

question: why do you have this condition:if (x != 1)should that not be the explanation?
Avatar of Abacus IT

ASKER

That condition is ignoring the first line in the file. My assumption is that ignoring the last line would be something very similar.
ASKER CERTIFIED SOLUTION
Avatar of Guy Hengel [angelIII / a3]
Guy Hengel [angelIII / a3]
Flag of Luxembourg image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
@Carl, the issue is that I need it to be in a while loop so that it iterates through the lines.
@angel, I tried the code change you supplied, but it still doesn't ignore the last line of the file.

So, what I did was combine what you both supplied and went with:

while (x < lines.Length - 1 && lines[x].Tostring() != "\n")

Unfortunately that still seems to include the last line in the file to the failurecount variable.
>but it still doesn't ignore the last line of the file.

if the last list has \n only, you want to actually skip the last 2 items from the array?
OR, if you have the file splitted by \r\n  and not \r, you could remove that test on \n ?
Yea, I guess that's what I would want then, to skip the last 2 items from the array.

I changed  the condition to read:

while (x < lines.Length - 2 && lines[x].Tostring() != "\n")

And this got me the exact result I wanted.
Avatar of jdavistx
jdavistx

You also don't need to use .ToString() on string array elements, and you should encapsulate your StreamReader with a using statement. From your excerpt, your boardLine variable is also not needed.  Of course, maybe you're using these variable else where, but it would appear your code could, in part, be shorted a few lines.




public string ReadFileBoardResp(string fileName)
{
	try
	{
		using(StreamReader sr = new StreamReader(fileName))
		{
			string[] lines = sr.ReadToEnd().Split(char.Parse("\r"));
			int x = 0;
			successCount = 0;
			failureCount = 0;

			while (x != 0 && x != lines.Length-1 && lines[x] != "\n")
			{
				string[] parts = lines[x].Split(',');
				boardRespID = Contents.Substring(11, 7);

				if (parts[4] == "\"SUCCESSFUL in MAP\"")
					successCount++;
				else
					failureCount++;

				x++;
			}
		}
	}
	catch (Exception e){ Add.AddToFile(e.Message.ToString()); }

	return boardLine;
}

Open in new window