powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Парсер файла (поиск разделителя и поиск признака начала нужной строки)
12 сообщений из 12, страница 1 из 1
Парсер файла (поиск разделителя и поиск признака начала нужной строки)
    #38174354
2king2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил заняться изучением LINQ и PLINQ и сразу попалась не тривиальная задача. Необходимо найти строки, которые начинаются на FGST и вытащить из этой строки 5,6 и 6 значение. Направите на путь истинный. Как сделать?

FK|TXFG090925|АСФК|9.0||
FROM|9500|ФЕДЕРАЛЬНОЕ КАЗНАЧЕЙСТВО|
TO|2|19001|МИНИСТЕРСТВО ФИНАНСОВ НИЖЕГОРОДСКОЙ ОБЛАСТИ|||
FG|3B296774-F1EC-424F-B8A7-0CBE01BDDEF9|Федеральный бюджет|01.01.2009|Исполнитель|Сидоров С.М.|215-64-25|
FGST |6F9619FF-8B86-D011-B42D-00C04FC964F1||9500| 210 | Оплата труда и начисления на оплату труда |Оплата труда и начисления на оплату труда|01.01.2008|| 1 |01.01.2008 15:00:00|
FGST |6F9619FF-8B86-D011-B42D-00C04FC964FA|6F9619FF-8B86-D011-B42D-00C04FC964FB|9500| 211 | Заработная плата |Заработная плата|01.01.2008|| 1 |01.01.2008 15:00:00|
FGST |6F9619FF-8B86-D011-B42D-00C04FC96411|6F9619FF-8B86-D011-B42D-00C04FC96412|9500| 212 | Прочие выплаты |Прочие выплаты|01.01.2008|| 1 |01.01.2008 15:00:00|
...
Рейтинг: 0 / 0
Парсер файла (поиск разделителя и поиск признака начала нужной строки)
    #38174499
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все гуано в кучку :)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var instr = @"FK|TXFG090925|АСФК|9.0||
FROM|9500|ФЕДЕРАЛЬНОЕ КАЗНАЧЕЙСТВО|
TO|2|19001|МИНИСТЕРСТВО ФИНАНСОВ НИЖЕГОРОДСКОЙ ОБЛАСТИ|||
FG|3B296774-F1EC-424F-B8A7-0CBE01BDDEF9|Федеральный бюджет|01.01.2009|Исполнитель|Сидоров С.М.|215-64-25|
FGST|6F9619FF-8B86-D011-B42D-00C04FC964F1||9500|210|Оплата труда и начисления на оплату труда|Оплата труда и начисления на оплату труда|01.01.2008||1|01.01.2008 15:00:00|
FGST|6F9619FF-8B86-D011-B42D-00C04FC964FA|6F9619FF-8B86-D011-B42D-00C04FC964FB|9500|211|Заработная плата|Заработная плата|01.01.2008||1|01.01.2008 15:00:00|
FGST|6F9619FF-8B86-D011-B42D-00C04FC96411|6F9619FF-8B86-D011-B42D-00C04FC96412|9500|212|Прочие выплаты|Прочие выплаты|01.01.2008||1|01.01.2008 15:00:00|";
var idxs = new int[]{4, 5};

instr.Split(new char[] {'\r', '\n'})
	 .Where(line => line.StartsWith("FGST|"))
	 .Select(line => String.Join("|",line.Split(new char[] {'|'}).Where((i, v) => idxs.Contains(v)))
	 ) .Dump();
...
Рейтинг: 0 / 0
Парсер файла (поиск разделителя и поиск признака начала нужной строки)
    #38174597
2king2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser
Код: c#
1.
) .Dump();


Error

'System.Collections.Generic.IEnumerable<string>' does not contain a definition for 'Dump' and no extension method 'Dump' accepting a first argument of type 'System.Collections.Generic.IEnumerable<string>' could be found (are you missing a using directive or an assembly reference?)
...
Рейтинг: 0 / 0
Парсер файла (поиск разделителя и поиск признака начала нужной строки)
    #38174686
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.ToList() ?
...
Рейтинг: 0 / 0
Парсер файла (поиск разделителя и поиск признака начала нужной строки)
    #38178033
2king2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser.ToList() ?
Да спасибо, так работает, но задача поменялась нужен XML на выходе. Теперь я в полной прострации как?
...
Рейтинг: 0 / 0
Парсер файла (поиск разделителя и поиск признака начала нужной строки)
    #38178114
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведите пример того что вам нужно - результирующий xml.
Любую задачу можно решить "в лоб"... В какое место вам линк уперся я не пойму...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
var instr = @"FK|TXFG090925|АСФК|9.0||
FROM|9500|ФЕДЕРАЛЬНОЕ КАЗНАЧЕЙСТВО|
TO|2|19001|МИНИСТЕРСТВО ФИНАНСОВ НИЖЕГОРОДСКОЙ ОБЛАСТИ|||
FG|3B296774-F1EC-424F-B8A7-0CBE01BDDEF9|Федеральный бюджет|01.01.2009|Исполнитель|Сидоров С.М.|215-64-25|
FGST|6F9619FF-8B86-D011-B42D-00C04FC964F1||9500|210|Оплата труда и начисления на оплату труда|Оплата труда и начисления на оплату труда|01.01.2008||1|01.01.2008 15:00:00|
FGST|6F9619FF-8B86-D011-B42D-00C04FC964FA|6F9619FF-8B86-D011-B42D-00C04FC964FB|9500|211|Заработная плата|Заработная плата|01.01.2008||1|01.01.2008 15:00:00|
FGST|6F9619FF-8B86-D011-B42D-00C04FC96411|6F9619FF-8B86-D011-B42D-00C04FC96412|9500|212|Прочие выплаты|Прочие выплаты|01.01.2008||1|01.01.2008 15:00:00|";

var ld = new char[] {'\r', '\n'};
var cd = new char[] {'|'};
var xml = new XElement("DOC", instr.Split( ld, StringSplitOptions.RemoveEmptyEntries)
										 .Select(line => new XElement(line.Split(cd)[0],
      											line.Split(cd)
													.Where((column, index) => index > 0)
          											.Select((column, index) => new XElement("Item" + index, column)))));
xml.ToString();

...
Рейтинг: 0 / 0
Парсер файла (поиск разделителя и поиск признака начала нужной строки)
    #38178120
2king2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserПриведите пример того что вам нужно - результирующий xml.
В ветке про XML http://www.sql.ru/forum/actualthread.aspx?tid=1009567
Надеюсь меня за флуд не забанят
...
Рейтинг: 0 / 0
Парсер файла (поиск разделителя и поиск признака начала нужной строки)
    #38178171
2king2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserЛюбую задачу можно решить "в лоб"... В какое место вам линк уперся я не пойму...
Мой скудный опыт меня занес на LINQ. Кстати, предложенное Вами решение почти, то что нужно, спасибо. А кроме линка какие варианты еще есть? Хочется красивое и универсальное решение)

Мне бы вот такой XML на выходе получить
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
<?xml version="1.0" encoding="utf-8"?>
<FILENAME>
  <FK>
    <NUM_VER>TXFF090925</NUM_VER>
    <FORMER>АСФК</FORMER>
    <FORM_VER>9.0</FORM_VER>
    <NORM_DOC/>
  </FK>
  <FROM>
    <KOD_TOFK>9500</KOD_TOFK>
    <NAME_TOFK>ИВАН ИВАНОВ</NAME_TOFK>
  </FROM>
  <TO>
    <BUDG_LEVEL>2</BUDG_LEVEL>
    <KOD_UBP>19001</KOD_UBP>
    <NAME_UBP>ИНТЕРПРАЙС</NAME_UBP>
    <KOD_TOFK/>
    <NAME_TOFK/>
  </TO>
  <FF>
    <GUID_FK>3B296774-F1EC-424F-B8A7-0CBE01BDDEF9</GUID_FK>
    <NAME_BUD>Бюджет</NAME_BUD>
    <DATE_FORM>01.01.2009</DATE_FORM>
    <DOL_ISP>Исполнитель</DOL_ISP>
    <NAME_ISP>Сидоров С.М.</NAME_ISP>
    <TEL_ISP>215-64-25</TEL_ISP>
  </FF>
  <FFST GUID="6F9619FF-8B86-D011-B42D-00C04FC964FF" GUID_PARENT="6F9619FF-8B86-D011-B42D-00C04FC964F1" KOD_TOFK_C="9500" RAZDEL="0403" CNAME="Исследование" NAME="Исследование букашек" DATE_BEGIN="01.01.2008" DATE_END="" STATUS="1" DATE_CHANGE="01.01.2008 15:00:00"/>
  <FFST GUID="6F9619FF-8B86-D011-B42D-00C04FC96411" GUID_PARENT="F9619FF-8B86-D011-B42D-00C04FC96412" KOD_TOFK_C="9500" RAZDEL="0403" CNAME="Прочие выплаты" NAME="Прочие букашек" DATE_BEGIN="01.01.2008" DATE_END="" STATUS="1" DATE_CHANGE="01.01.2008 15:00:00"/>
</FILENAME>






...
Рейтинг: 0 / 0
Парсер файла (поиск разделителя и поиск признака начала нужной строки)
    #38178424
2king2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser,

Стал ковырять Ваш код, но что не выходит каменный цветок

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class TFF
{
   public XElement FK;
   string[] FK = new string[] { "NUM_VER", "FORMER", "FORM_VER" };
   ...
   public XAttribute FGST;
}

var xml = new XElement("DOC", instr.Split(ld, StringSplitOptions.RemoveEmptyEntries)
            .Select(line => new XElement(line.Split(cd)[0], line.Split(cd)
            .Where((column, index) => index > 0)
            .Select((column, index) => new TFF(line.Split(cd)[0] + index, column)))));
...
Рейтинг: 0 / 0
Парсер файла (поиск разделителя и поиск признака начала нужной строки)
    #38178558
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xslt - отрихтуйте как вам нужно...
Если не клинить на линкью, все можно сделать без затей... Но каждый сам себе злобный буратино :)
...
Рейтинг: 0 / 0
Парсер файла (поиск разделителя и поиск признака начала нужной строки)
    #38178814
2king2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser,

Ого!!! Я даже не знал, что так можно. СПАСИБО!!!
...
Рейтинг: 0 / 0
Парсер файла (поиск разделителя и поиск признака начала нужной строки)
    #38196379
2king2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserxslt - отрихтуйте как вам нужно...
Если не клинить на линкью, все можно сделать без затей... Но каждый сам себе злобный буратино :)
У меня первая и последняя строчка файла отличны от структуры всего фала, т.е. не имеют разделители '|'
А как можно используя предложенный вами парсер сделать так, чтобы первая и последняя строчка тоже парсились?

Код: sql
1.
2.
3.
20.02.2013 создания файла
...|...|....
Всего строк - 12


Нужно на выходе, что-то такое
Код: xml
1.
2.
3.
4.
5.
6.
<?xml version="1.0" encoding="utf-8"?>
<FILENAME>
  <DATE_CREATE>20.02.2013 создания файла</DATE_CREATE>
  ...
  <TOTAL_LINES>Всего строк - 12</TOTAL_LINES>
<FILENAME>
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Парсер файла (поиск разделителя и поиск признака начала нужной строки)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]