Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2015, 09:52   #1
lucky_thi13en
Пользователь
 
Регистрация: 24.09.2015
Сообщений: 12
По умолчанию Изменение вида строки

Добрый день! Подскажите как строку вида:
Код:
string str = "01;FARTUKCLASSIC;0;;;;1;;0;0;0;_colfar=2014\SO;_hfar=600{RT16}01;FARTUKCLASSIC-600;4023.46;;;;1;;3000;600;0;2014\SO";
переделать вот в такой вид:
Код:
string newstr = "<Id>10</Id> \n <ParentId>1</ParentId> \n <TIPO>01</TIPO> \n <ARTICOLO>FARTUKCLASSIC</ARTICOLO> \n
 <VALORE>0</VALORE> \n <BASE></BASE> \n <GenCod></GenCod> \n <GenVar></GenVar> \n <QTA>1</QTA> \n <Mat></Mat> \n
 <L>0</L> \n <A>0</A> \n <P>0</P> \n <VAR>_colfar=2014\SO;_hfar=600</VAR> \n <Id>11</Id> \n <ParentId>1</ParentId> \n
 <TIPO>01</TIPO> \n <ARTICOLO>FARTUKCLASSIC-600</ARTICOLO> \n <VALORE>4023.46</VALORE> \n <BASE></BASE> \n
 <GenCod></GenCod> \n <GenVar></GenVar> \n <QTA>1</QTA> \n <Mat></Mat> \n <L>3000</L> \n <A>600</A> \n <P>0</P> \n
 <VAR>_colfar=2014\SO</VAR> ";
Поясню: точкой с запятой разделены заголовки(Articolo, valore, base, и другие), {RT16} означает что пошло всё сначала то есть заново id, parentid и т.д. Значения в заголовках могут быть любыми, если пусто значит его просто нет. Id может быть рандом, главное чтобы не повторялся, Parent Id всегда 1. Тлько тут одна проблема после 11-ой точкой с запятой идёт значение 12 и оно может быть перечислено точкой с запятой, вот тут можно это перечисление сделать через любой сиволь пусть это будет просто запятая, значения не имеет.
чтобы проще понять приведу пример:

строка-->Значение1;Значение2;Значение3;Знач ение4;Значение5;Значение6;Значение7 ;Значение8;Значение9;Значение10;Зна чение11;Значение12{RT16}Значение1;З начение2;Значение3;Значение4;Значен ие5;Значение6;Значение7;Значение8;З начение9;Значение10;Значение11;Знач ение12

строка которая должна получится -->
Цитата:
<Id>10</Id> \n <ParentId>1</ParentId> \n <TIPO>Значение1</TIPO> \n <ARTICOLO>Значение2</ARTICOLO> \n <VALORE>Значение3</VALORE> \n <BASE>Значение4</BASE> \n <GenCod>Значение5</GenCod> \n <GenVar>Значение6</GenVar> \n <QTA>Значение7</QTA> \n <Mat>Значение8</Mat> \n <L>Значение9</L> \n <A>Значение10</A> \n <P>Значение11</P> \n <VAR>Значение12</VAR> \n <Id>11</Id> \n <ParentId>1</ParentId> \n <TIPO>Значение1</TIPO> \n <ARTICOLO>Значение2</ARTICOLO> \n <VALORE>Значение3</VALORE> \n <BASE>Значение4</BASE> \n <GenCod>Значение5</GenCod> \n <GenVar>Значение6</GenVar> \n <QTA>Значение7</QTA> \n <Mat>Значение8</Mat> \n <L>Значение9</L> \n <A>Значение10</A> \n <P>Значение11</P> \n <VAR>Значение12</VAR>
Очень нужна ваша помощь, заранее спасибо.

Последний раз редактировалось Stilet; 02.11.2015 в 10:09.
lucky_thi13en вне форума Ответить с цитированием
Старый 02.11.2015, 11:19   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
string frm=@"<Id>10</Id> 
<ParentId>1</ParentId>
<TIPO>{0}</TIPO> 
<ARTICOLO>{1}</ARTICOLO>
<VALORE>{2}</VALORE>
<BASE>{3}</BASE>
<GenCod>{4}</GenCod>
<GenVar>{5}</GenVar>
<QTA>{6}</QTA>
<Mat>{7}</Mat>
<L>{8}</L>
<A>{9}</A>
<P>{10}</P>
<VAR>{11}</VAR>
<Id>11</Id>
<ParentId>1</ParentId>
<TIPO>{0}</TIPO>
<ARTICOLO>{1}</ARTICOLO>
<VALORE>{2}</VALORE>
<BASE>{3}</BASE>
<GenCod>{4}</GenCod>
<GenVar>{5}</GenVar>
<QTA>{6}</QTA>
<Mat>{7}</Mat>
<L>{8}</L>
<A>{9}</A>
<P>{10}</P>
<VAR>{11}</VAR>";
string str = "01;FARTUKCLASSIC;0;;;;1;;0;0;0;_colfar=2014\\SO;_hfar=600{RT16}01;FARTUKCLASSIC-600;4023.46;;;;1;;3000;600;0;2014\\SO";
string[] arr = str.Split(';');
string result = string.Format(frm,arr);
Console.WriteLine(result);
Цитата:
Тлько тут одна проблема после 11-ой точкой с запятой идёт значение 12 и оно может быть перечислено точкой с запятой, вот тут можно это перечисление сделать через любой сиволь пусть это будет просто запятая, значения не имеет.
лишних точек с запятой быть не должно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.11.2015, 11:24   #3
lucky_thi13en
Пользователь
 
Регистрация: 24.09.2015
Сообщений: 12
По умолчанию

Пепел Феникса, спасибо большое, а что делать если строка к примеру динамическая? ну например она не два раза повторяется id, parentid, tipo, articolo и т.д. а к примеру три раза или четыре или пять?

Последний раз редактировалось lucky_thi13en; 02.11.2015 в 11:40.
lucky_thi13en вне форума Ответить с цитированием
Старый 02.11.2015, 12:06   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

фигурные скобки определяют номер позиции из str.
индексация с нуля.

там же есть повторы уже в формате.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.11.2015, 13:04   #5
lucky_thi13en
Пользователь
 
Регистрация: 24.09.2015
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
фигурные скобки определяют номер позиции из str.
индексация с нуля.

там же есть повторы уже в формате.
Вот что на выходе у программы
<Id>10</Id>
<ParentId>1</ParentId>
<TIPO>01</TIPO>
<ARTICOLO>FARTUKCLASSIC</ARTICOLO>
<VALORE>0</VALORE>
<BASE></BASE>
<GenCod></GenCod>
<GenVar></GenVar>
<QTA>1</QTA>
<Mat></Mat>
<L>0</L>
<A>0</A>
<P>0</P>
<VAR>_colfar=2014\\SO</VAR>
<Id>11</Id>
<ParentId>1</ParentId>
<TIPO>01</TIPO>
<ARTICOLO>FARTUKCLASSIC</ARTICOLO>
<VALORE>0</VALORE>
<BASE></BASE>
<GenCod></GenCod>
<GenVar></GenVar>
<QTA>1</QTA>
<Mat></Mat>
<L>0</L>
<A>0</A>
<P>0</P>
<VAR>_colfar=2014\\SO</VAR>
то есть он не видит сколько повторений, в каждое последуещее повторение он лепит значение из первого
lucky_thi13en вне форума Ответить с цитированием
Старый 02.11.2015, 13:18   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
string frm=@"<Id>10</Id> 
<ParentId>1</ParentId>
<TIPO>{0}</TIPO> 
<ARTICOLO>{1}</ARTICOLO>
<VALORE>{2}</VALORE>
<BASE>{3}</BASE>
<GenCod>{4}</GenCod>
<GenVar>{5}</GenVar>
<QTA>{6}</QTA>
<Mat>{7}</Mat>
<L>{8}</L>
<A>{9}</A>
<P>{10}</P>
<VAR>{11}</VAR>";
string str = "01;FARTUKCLASSIC;0;;;;1;;0;0;0;_colfar
=2014\\SO;_hfar=600{RT16}01;FARTUKCLASSIC-600;4023.46;;;;1
;;3000;600;0;2014\\SO";
string[] arr = str.Split(';');
for(int i=0; i<arr.Length/12; i++)
{
    string[] res_arr = new string[12];
    Array.Copy(arr,i*12,res_arr,0,12);
    string result = string.Format(frm,arr);
    Console.WriteLine(result);
}
как-то так.
и просьба, не надо уведомлять меня о вашем ответе тут.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.11.2015, 13:33   #7
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Сначала сплитить по {RT16}.
come-on вне форума Ответить с цитированием
Старый 02.11.2015, 13:48   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Верно, что-то я упустил это.
тогда все проще:
Код:
string frm=@"<Id>10</Id> 
<ParentId>1</ParentId>
<TIPO>{0}</TIPO> 
<ARTICOLO>{1}</ARTICOLO>
<VALORE>{2}</VALORE>
<BASE>{3}</BASE>
<GenCod>{4}</GenCod>
<GenVar>{5}</GenVar>
<QTA>{6}</QTA>
<Mat>{7}</Mat>
<L>{8}</L>
<A>{9}</A>
<P>{10}</P>
<VAR>{11}</VAR>";
string str = "01;FARTUKCLASSIC;0;;;;1;;0;0;0;_colfar=2014\\SO;_hfar=600{RT16}01;FARTUKCLASSIC-600;4023.46;;;;1;;3000;600;0;2014\\SO";
var data = str.Split(new []{"{RT16}"},StringSplitOptions.RemoveEmptyEntries).Select(e=>e.Split(';'));
foreach(var elem in data)
{
    string result = string.Format(frm,elem);
    Console.WriteLine(result);
}
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.11.2015, 13:49   #9
lucky_thi13en
Пользователь
 
Регистрация: 24.09.2015
Сообщений: 12
По умолчанию

Спасибо большое
lucky_thi13en вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение вида формы Jene4ka Общие вопросы Delphi 2 22.01.2011 19:02
Изменение вида URL SoFuWa WordPress и другие CMS 2 12.05.2010 21:59
Изменение вида указателя VistaSV30 Microsoft Office Access 1 08.01.2010 11:30
Изменение вида курсора Manya Общие вопросы C/C++ 1 25.03.2009 13:42
Изменение вида RichEdit AlexMori Общие вопросы Delphi 1 14.12.2007 14:40