Sam_gaik Ответов: 2

Как разделить строку в C#?


<pre>Hello I am new in c# and trying to split string. here is my string=
"[)>_d03006_d029VTCUP_d029P2865478547_d029T190917U111@9E005_d029_d030_d004"

GS is _d029

RS is _d030

EOT is _d004

and output should be 

[)>RS06

TCUP

2865478547

190917

U111

@

9E005

RSEOT


please help...thanks in advanced...!!


Что я уже пробовал:

<pre>  var input = "[)>_d03006_d029VTCUP_d029P2865478547_d029T190917U111@9E005_d029_d030_d004";
            var split = input.Split(new string[] { "_d029V","_d029P","_d029T" }, StringSplitOptions.RemoveEmptyEntries);

            label1.Text = split[0];
            label2.Text = split[1];
            label3.Text = split[2];
            label4.Text = split[3];

RickZeeland

Вы уверены, что в вашей входной строке не пропущены некоторые строки-разделители ?

F-ES Sitecore

Не зная правил для того, как строка сделана, буквально невозможно ответить на этот вопрос. Например, если длина строки остается прежней, то используйте Substring для чтения нужных вам частей. Если это более сложно, чем это, то вам нужно будет предоставить более подробную информацию.

2 Ответов

Рейтинг:
2

MadMyche

У меня такое чувство, что это часть более масштабного решения; и может быть лучшее решение для всего этого.... Если бы мы только знали, какова общая картина.

Я действительно узнаю основы ваших разделителей, поскольку они являются управляющими символами ASCII.
1. RS-это разделитель записей. Это похоже на ряд
2. GS-это групповой сепаратор, он аналогичен столбцу
3. ЭОТ-это конец передачи. Это и все последующее следует игнорировать

Если мы поместим это в XML вы получите такую структуру

<RS>
	06
	<GS>VTCUP</GS>
	<GS>P2865478547</GS>
	<GS>T190917U111@9E005</GS>
</RS>
Исходя из этого, я бы рекомендовал разделить несколько раз:
Первая пара шпагатов должна находиться на контрольных символах (RS, GS)

Теперь все становится сложнее:
1. Первые буквы после РС не сгруппированы; это может быть id записи?

2. Первый символ после GS вы также вытаскиваете в своем коде
.. Это атрибут или что-то подобное (имя столбца?). Может быть, взять подстроку(0,1)?

3. у вас также есть неопределенное разделение (@) в выходных данных, но не в коде


Рейтинг:
2

RickZeeland

var input = "[)>_d03006_d029VTCUP_d029P2865478547_d029T190917U111@9E005_d029_d030_d004";
input = input.Replace("_d029_", "#_").Replace("_d030", "RS").Replace("U111@", "U111#@#").Replace("_d004", "EOT");
var split = input.Split(new string[] { "_d029V", "_d029P", "_d029T", "#" }, StringSplitOptions.RemoveEmptyEntries);

foreach (var item in split)
{
    Debug.Print(item);
}


Sam_gaik

Спасибо, что это работает....теперь, как показать каждый вывод на этикетке?

RickZeeland

У вас уже есть код для этого, используйте label1.Text = split[0]; и т.д.