Skip to content

Instantly share code, notes, and snippets.

@cafeasp
Created February 23, 2023 14:33
Show Gist options
  • Save cafeasp/288298bf0127bdf25c9d26dcae21a9ea to your computer and use it in GitHub Desktop.
Save cafeasp/288298bf0127bdf25c9d26dcae21a9ea to your computer and use it in GitHub Desktop.
.net to parse an edi file
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