Разбор EDI-сообщений из строк в C # - PullRequest
1 голос
/ 13 сентября 2010

У меня есть эта строка:

UNB + UNOA: 1 + 094200005560743089001003: OD + 094200005565200077SP0001: OD + 100705: 1017 + 570180'UNH + 1 + SYNCRO: 2 :: OD 'MID + 102711015461800 + 100705: 1014'CDT + :::::: BQ6UB'BDT + :::::: 1003-002'CSG +: Nisses MONTERING ::::: BP2TH + 005 + TCSB'SEQ + CR + 2059433 + YV1CM5957B1574778: 602816985'ARD + 39855213 :: PART NO'SDD + 100705 + 1'UNT + 9 + 1'UNZ + 1 + 570180 '

Эта строка должна быть разделена на более мелкие части, которые следует хранитьпрочь в разных переменных.Текст можно разделить на несколько строк

  1. , используя текст разделителя (который является символом ') и несколько значений
  2. в каждой строке с двумя типами текста разделителя (+ знак, а также : символ).

Приведенный выше текст представляет собой заказ в виде материалов компании (клиента) другой компании (поставщику).Когда поставщик получил заказ в виде текстового файла, который загружается в компьютерную программу, эта программа разбивает текст на маленькие части и сохраняет их в различных переменных, которые будут сохранены в базе данных на более позднем этапе.

Цель - создать форму с использованием C #.Эта форма должна иметь текстовое поле, когда пользователь вводит текстовую строку, а затем кнопку. После того, как пользователь нажмет кнопку, текст, введенный в текстовое поле, будет разделен на маленькие части, и каждая часть будет сохранена в отдельной переменной.Как только текст разделен и сохранен в переменных, все данные должны быть сохранены в массиве или в объекте (классе).


Все значения хранятся в виде строк.Строка состоит из:

Textpart1 Textpart2 + + + + ... Textpart2 text portion (s) '

Каждая часть текста состоит из следующих элементов:

Part 1: Part2: Part 3: Part4: Part5 ... Part (n)

Поэтому каждое значение может быть указано в форме

Text-> Text line-> text portion-> Del

Каждыйтекст начинается со значения, которое определяет, какая информация сохраняется в строке.Таким образом, первое значение в каждой строке вызывается для значения ключа (например, MID, SEQ, ARD и т. Д.).Прямо сейчас в каждом тексте есть только одно значение ключа.

Здесь Synroid textpart2 указан как Часть 1 и строка, в которой значение ключа имеет MID.SynroTid указывает, что textdel3 и del2.

Ответы [ 2 ]

2 голосов
/ 13 сентября 2010

Чтобы разбить строку на части, разделив ее по определенному символу, просто используйте string.Split(). Например:

// get the order somehow
string order = ...;

var lines = order.Split('\'');     // splits at the apostrophe character

foreach (var line in lines)
{
    var pieces = line.Split('+', ':');    // splits at both of those characters

    DoSomething(pieces);
}
0 голосов
/ 13 сентября 2010

Как ранее сообщалось, string.Split () - способ сделать это.Обычно я использую несколько вариантов:

string[] pieces = value.Split(new char[] { '+', ':' } );
string[] pieces = value.Split(new string[] { "+", ":" } ); 
string[] pieces = value.Split(new string[] { "+", ":" }, StringSplitOptions.RemoveEmptyEntries);

Третий вариант удалит все пустые записи после разделения.Однако во многих случаях полезно использовать в EDI / EDIFACT пустые записи, поскольку они будут необходимы для определения данных по их положению в сегменте.

...