Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Parsing through a pipe delimited File

Posted on 2010-09-23
10
Medium Priority
?
2,321 Views
Last Modified: 2012-05-10
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

0
Comment
Question by:Abacus IT
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 2
  • 2
  • +1
10 Comments
 
LVL 10

Expert Comment

by:Umar Topia
ID: 33744170
Instead of this
you use streamreader to read the file
and then use object of streamreader srObj.ReadLine() to read line by line
0
 
LVL 1

Author Comment

by:Abacus IT
ID: 33744213
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
 
LVL 1

Author Comment

by:Abacus IT
ID: 33744287
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
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
LVL 1

Author Comment

by:Abacus IT
ID: 33745052
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
 
LVL 16

Assisted Solution

by:kris_per
kris_per earned 1000 total points
ID: 33745554

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
 
LVL 16

Accepted Solution

by:
kris_per earned 1000 total points
ID: 33745587

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
 
LVL 33

Expert Comment

by:Todd Gerbert
ID: 33745589
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
 
LVL 33

Expert Comment

by:Todd Gerbert
ID: 33745645
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
 
LVL 1

Author Comment

by:Abacus IT
ID: 33746485
@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
 
LVL 1

Author Closing Comment

by:Abacus IT
ID: 33746498
Question was answered exactly as I needed it to be.
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Extention Methods in C# 3.0 by Ivo Stoykov C# 3.0 offers extension methods. They allow extending existing classes without changing the class's source code or relying on inheritance. These are static methods invoked as instance method. This…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Video by: ITPro.TV
In this episode Don builds upon the troubleshooting techniques by demonstrating how to properly monitor a vSphere deployment to detect problems before they occur. He begins the show using tools found within the vSphere suite as ends the show demonst…
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.
Suggested Courses

705 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