Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

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

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

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

Добрый день! Подскажите как строку вида:
Код:

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 в 11:09.
lucky_thi13en вне форума   Ответить с цитированием
Старый 02.11.2015, 12:19   #2
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 20,997
Репутация: 3402

icq: 446843180
skype: phoenix_proger
По умолчанию

Код:

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, 12:24   #3
lucky_thi13en
Пользователь
 
Регистрация: 24.09.2015
Сообщений: 12
Репутация: 10
По умолчанию

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

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

icq: 446843180
skype: phoenix_proger
По умолчанию

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

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

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
фигурные скобки определяют номер позиции из 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, 14:18   #6
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 20,997
Репутация: 3402

icq: 446843180
skype: phoenix_proger
По умолчанию

Код:

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, 14:33   #7
come-on
Профессионал
 
Регистрация: 21.10.2015
Сообщений: 1,414
Репутация: 414
По умолчанию

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

icq: 446843180
skype: phoenix_proger
По умолчанию

Верно, что-то я упустил это.
тогда все проще:
Код:

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, 14:49   #9
lucky_thi13en
Пользователь
 
Регистрация: 24.09.2015
Сообщений: 12
Репутация: 10
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


10:29.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru