Parsing through a pipe delimited File

Hello Everyone,

In the sample code I supplied, I and using a StreamReader to read a pipe delimited file. A sample of the file looks like this:

11517838|05   |F |01|2041|Y|0.1500|N| \n 11517838|05   |F |01|2042|Y|0.1500|N| \n11517838|05   |F |01|2044|Y|0.1500|N| \n11517838|05   |F |01|2047|Y|0.1500|N| \n11517838|05   |F |01|2049|Y|0.1500|N| \n

In the file, they are all on one line, with the newline character after the |N|. What I need to be able to do, is read the whole file into a string array like I have shown, but then I need to go 'line' by 'line' to populate some string variables. Right now when I run my code, it will go in and get the first:

11517838|05   |F |01|2041|Y|0.1500|N|

from the file, but when it goes in for the second iteration, It does not move to the next line, aka, the character after the newline mark. Thanks in advance for your help.
StreamReader sr = new StreamReader(dailyAudit.ToString());
                        auditLine = sr.ReadToEnd();
                        string auditContents = auditLine;
                        string[] lines = auditContents.Split(char.Parse("|"));
                        int x = 1;
                        
                        while (x < lines.Length && lines[x].ToString() != "\n")
                       {
                            x++;
                            string MID = lines[0];
                            string Vendor = lines[1];
                            string VendType = lines[2];
                            string CardID = lines[3];
                            string ChargeType = lines[4];
                            string RateType = lines[5];
                            string Amount = lines[6];
                            string ExcessRol = lines[7];
                            string FileDate = ftpDate;
                       }

Open in new window

LVL 1
Abacus ITAsked:
Who is Participating?
 
kris_perConnect With a Mentor Commented:

I mean, as below:

StreamReader sr = new StreamReader(dailyAudit.ToString());

while (true)
      {
             string aLine = sr.ReadLine();
             if(aLine == null) break;

                            string[] lines = aLine.Split("|");

                            string MID = lines[0];
                            string Vendor = lines[1];
                            string VendType = lines[2];
                            string CardID = lines[3];
                            string ChargeType = lines[4];
                            string RateType = lines[5];
                            string Amount = lines[6];
                            string ExcessRol = lines[7];
                            string FileDate = ftpDate;
                        }

Open in new window

0
 
Umar Topia.Net Full Stack DeveloperCommented:
Instead of this
you use streamreader to read the file
and then use object of streamreader srObj.ReadLine() to read line by line
0
 
Abacus ITAuthor Commented:
So, I could change the code to look like:
StreamReader sr = new StreamReader(dailyAudit.ToString());
                        auditLine = sr.ReadLine();
                        string auditContents = auditLine;
                        string[] lines = auditContents.Split(char.Parse("|"));
                        while (sr.ReadLine() != null)
                       {
                            string MID = lines[0];
                            string Vendor = lines[1];
                            string VendType = lines[2];
                            string CardID = lines[3];
                            string ChargeType = lines[4];
                            string RateType = lines[5];
                            string Amount = lines[6];
                            string ExcessRol = lines[7];
                            string FileDate = ftpDate;

                       }

Open in new window

0
Cloud Class® Course: Microsoft Office 2010

This course will introduce you to the interfaces and features of Microsoft Office 2010 Word, Excel, PowerPoint, Outlook, and Access. You will learn about the features that are shared between all products in the Office suite, as well as the new features that are product specific.

 
Abacus ITAuthor Commented:
Edit to that last code sample:

while (sr.ReadLine() != null)
                       {    
                            string auditContents = auditLine;
                            string[] lines = auditContents.Split(char.Parse("|"));
                           
                            string MID = lines[0];
                            string Vendor = lines[1];
                            string VendType = lines[2];
                            string CardID = lines[3];
                            string ChargeType = lines[4];
                            string RateType = lines[5];
                            string Amount = lines[6];
                            string ExcessRol = lines[7];
                            string FileDate = ftpDate;

                       }
0
 
Abacus ITAuthor Commented:
So I totally changed my code to read as you see below. Problem is that it still won't move on to the next line in the file.
while (sr.ReadLine() != null)
                        {
                            string[] lines = sr.ReadLine().Split(char.Parse("|"));

                            string MID = lines[0];
                            string Vendor = lines[1];
                            string VendType = lines[2];
                            string CardID = lines[3];
                            string ChargeType = lines[4];
                            string RateType = lines[5];
                            string Amount = lines[6];
                            string ExcessRol = lines[7];
                            string FileDate = ftpDate;
                        }

Open in new window

0
 
kris_perConnect With a Mentor Commented:

Use it like below:


while (true)
                        {
string aLine = sr.ReadLine();
if(aLine == null) break;

                            string[] lines = aLine.Split("|");

                            string MID = lines[0];
                            string Vendor = lines[1];
                            string VendType = lines[2];
                            string CardID = lines[3];
                            string ChargeType = lines[4];
                            string RateType = lines[5];
                            string Amount = lines[6];
                            string ExcessRol = lines[7];
                            string FileDate = ftpDate;
                        }

Open in new window

0
 
Todd GerbertIT ConsultantCommented:
You can use File.ReadAllLines to get a string array, where each item in the array represents one line in the file.  Then loop through that array, and split each individual line on the | character to get the fields.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
	class Program
	{
		static void Main(string[] args)
		{
			string[] lines = File.ReadAllLines("C:\\test.txt");

			foreach (string line in lines)
			{
				string[] fields = line.Split('|');

				string one = fields[0];
				string two = fields[1];
				string three = fields[2];
				string four = fields[3];
			}
		}
	}
}

Open in new window

0
 
Todd GerbertIT ConsultantCommented:
Sorry...didn't catch that your using a StreamReader on a string variable.  If File.ReadAllLines doesn't work in your case, you can just use Split('\n') on dailyAudit.ToString().
...what is dailyAudit?  Maybe the problem is that dailyAudit only has one line in it?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
	class Program
	{
		static void Main(string[] args)
		{
			string dailyAudit = "The|Quick|Brown|Fox\nJumped|Over|The|Lazy\nDog|Hello|World|Test\n";

			string[] lines = dailyAudit.ToString().Split('\n');

			foreach (string line in lines)
			{
				string[] fields = line.Split('|');

				string one = fields[0];
				string two = fields[1];
				string three = fields[2];
				string four = fields[3];
			}
		}
	}
}

Open in new window

0
 
Abacus ITAuthor Commented:
@Kris_per, I tried your code, and it is doing exactly what I need it to. Thank you very much for all the help everyone.
0
 
Abacus ITAuthor Commented:
Question was answered exactly as I needed it to be.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.