Solved

Parsing through a pipe delimited File

Posted on 2010-09-23
10
2,099 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
  • 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
 
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 250 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
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 16

Accepted Solution

by:
kris_per earned 250 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

Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Any suggestion about a VB.net logging tool? Open Source Ideally. 6 34
Images 3 20
cs.Designer Issue 2 14
cs.Designer Issue(2) 2 14
Introduction Although it is an old technology, serial ports are still being used by many hardware manufacturers. If you develop applications in C#, Microsoft .NET framework has SerialPort class to communicate with the serial ports.  I needed to…
This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
This video discusses moving either the default database or any database to a new volume.
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

708 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

13 Experts available now in Live!

Get 1:1 Help Now