Solved

C# Array ignoring last entry in the array

Posted on 2010-09-09
8
309 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]
ID: 33636050
question: why do you have this condition:if (x != 1)should that not be the explanation?
0
 
LVL 1

Author Comment

by:Abacus IT
ID: 33636117
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
ID: 33636162
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
ID: 33636165
Try changing your condition to the following:

    if (x != 1 && x < lines.Count-1)
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 1

Author Comment

by:Abacus IT
ID: 33636373
@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]
ID: 33636412
>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
ID: 33636477
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
ID: 33636613
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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction This article series is supposed to shed some light on the use of IDisposable and objects that inherit from it. In essence, a more apt title for this article would be: using (IDisposable) {}. I’m just not sure how many people would ge…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
This is a video that shows how the OnPage alerts system integrates into ConnectWise, how a trigger is set, how a page is sent via the trigger, and how the SENT, DELIVERED, READ & REPLIED receipts get entered into the internal tab of the ConnectWise …
Concerto provides fully managed cloud services and the expertise to provide an easy and reliable route to the cloud. Our best-in-class solutions help you address the toughest IT challenges, find new efficiencies and deliver the best application expe…

914 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

21 Experts available now in Live!

Get 1:1 Help Now