Created
February 23, 2023 14:33
-
-
Save cafeasp/288298bf0127bdf25c9d26dcae21a9ea to your computer and use it in GitHub Desktop.
.net to parse an edi file
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Text; | |
using EdiEngine; | |
using EdiEngine.Runtime; | |
using Newtonsoft.Json; | |
namespace ParseEDI; | |
class Program | |
{ | |
static async Task Main(string[] args) | |
{ | |
Console.WriteLine("Hello, World!"); | |
//using https://github.com/olmelabs/EdiEngine/wiki/Reading-EDI-and-Writing-JSON-or-XML | |
//sample.txt has the edi data from an 850 | |
string data = await ReadTextFileAsync("/Users/victorpacheco/Desktop/YouTube/sample.txt"); | |
//Console.WriteLine(data); | |
Parse850(data); | |
Console.ReadLine(); | |
} | |
static void Parse850(string edi) | |
{ | |
EdiDataReader r = new EdiDataReader(); | |
EdiBatch b = r.FromString(edi); | |
//Serialize the whole batch to JSON | |
JsonDataWriter w1 = new JsonDataWriter(); | |
string json = w1.WriteToString(b); | |
Console.WriteLine(json); | |
Console.WriteLine("-----"); | |
var items = ExportItems(b.Interchanges); | |
File.WriteAllText("/Users/victorpacheco/Desktop/YouTube/sample-items-po-"+items[1] +".csv", items[0]); | |
} | |
static string[] ExportItems(List<EdiInterchange> ediInterchange) { | |
var sb = new StringBuilder(); | |
string deli = ","; | |
string po = string.Empty; | |
foreach (var interchange in ediInterchange) | |
{ | |
foreach (var group in interchange.Groups) | |
{ | |
foreach (var transaction in group.Transactions) | |
{ | |
po = string.Empty; | |
foreach (var content in transaction.Content) | |
{ | |
if (content.Name.Equals("BEG")) { | |
var poData = content as EdiSegment; | |
if (poData != null) { | |
var poSegment = poData.Content as List<DataElementBase>; | |
po = poSegment[2].Val; | |
} | |
} | |
if (content.Name.Equals("L_PO1")) { | |
var items = content as EdiEngine.Runtime.EdiLoop; | |
if (items != null) { | |
foreach (var itemContent in items.Content) | |
{ | |
var segment = itemContent as EdiSegment; | |
if (segment != null) { | |
if (segment.Name.Equals("PO1")) | |
{ | |
foreach (var segmentContent in segment.Content) | |
{ | |
var data = segmentContent as EdiSimpleDataElement; | |
if (data != null) | |
{ | |
var value = data.Val; | |
sb.Append(value + deli); | |
} | |
} | |
sb.Append("\n"); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
return new string[2]{ sb.ToString(),po}; | |
} | |
static async Task<string> ReadTextFileAsync(string filename) { | |
char[] result; | |
StringBuilder builder = new StringBuilder(); | |
using (StreamReader reader = File.OpenText(filename)) | |
{ | |
result = new char[reader.BaseStream.Length]; | |
await reader.ReadAsync(result, 0, (int)reader.BaseStream.Length); | |
} | |
foreach (char c in result) | |
{ | |
builder.Append(c.ToString().Replace("\n","")); | |
} | |
return builder.ToString(); | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment