Solved

C# Array ignoring last entry in the array

Posted on 2010-09-09
8
308 Views
Last Modified: 2012-05-10
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

0
Comment
Question by:Abacus IT
8 Comments
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
Comment Utility
question: why do you have this condition:if (x != 1)should that not be the explanation?
0
 
LVL 1

Author Comment

by:Abacus IT
Comment Utility
That condition is ignoring the first line in the file. My assumption is that ignoring the last line would be something very similar.
0
 
LVL 142

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 63 total points
Comment Utility
ok, why don't you do like this:
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 = 1;

                successCount = 0;

                failureCount = 0;

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

                {

                    string[] parts = lines[x].Split(char.Parse(","));

                    x++;

                    boardRespID = Contents.Substring(11, 7);



                        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

0
 
LVL 52

Assisted Solution

by:Carl Tawn
Carl Tawn earned 62 total points
Comment Utility
Try changing your condition to the following:

    if (x != 1 && x < lines.Count-1)
0
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 
LVL 1

Author Comment

by:Abacus IT
Comment Utility
@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.
0
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
Comment Utility
>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 ?
0
 
LVL 1

Author Comment

by:Abacus IT
Comment Utility
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.
0
 
LVL 7

Expert Comment

by:jdavistx
Comment Utility
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

0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Article by: Ivo
Anonymous Types in C# by Ivo Stoykov Anonymous Types are useful when  we do not need to follow usual work-flow -- creating object of some type, assign some read-only values and then doing something with them. Instead we can encapsulate this read…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
In this tutorial you'll learn about bandwidth monitoring with flows and packet sniffing with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're interested in additional methods for monitoring bandwidt…

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now