|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
заполнение по столбцам в listview
здравствуйте подскажите плиз код.
не получается обработать файлик представим что есть файл с подобным содержанием Код:
1CClientBankExchange ВерсияФормата=1.02 Кодировка=Windows Отправитель=Управление производственным предприятием Получатель=Система "iBank 2" ООО "БИФИТ" ДатаСоздания=02.06.2016 ВремяСоздания=12:43:32 ДатаНачала=02.06.2016 ДатаКонца=02.06.2016 РасчСчет=4070281040012045454445 Документ=Платежное поручение Документ=Заявление на аккредитив Документ=Платежное требование Документ=Инкассовое поручение СекцияДокумент=Платежное поручение Номер=317 Дата=02.06.2016 Сумма=93477.96 ПлательщикСчет=45454545454554500098 Плательщик1=Общество с ограниченной ответственностью научно-производственная фирма "Пром" ПлательщикРасчСчет=4070281040012045454445 ПлательщикБанк1=Филиал "Московский" АКИБ "ОБРАЗОВАНИЕ" (АО) ПлательщикБИК=456456456 ПлательщикКорсчет=4565464564564564564 ПолучательСчет=45454545454554500098 Получатель=ИНН 6744002766 "О "ПРИБОР" ПолучательИНН=4567787888 Получатель1= 1 фирма ПолучательРасчСчет=40502810859020100011 ПолучательБанк1=ОТДЕЛЕНИЕ N649 СБЕРБАНКА РОССИИ ПолучательБанк2=Г. МОЛ ПолучательБИК=046454542 ПолучательКорсчет=30101810000000000732 ВидПлатежа=Электронно ВидОплаты=01 ПлательщикКПП=5910101100 ПолучательКПП=673101011 Очередность=5 НазначениеПлатежа=Оплата по счету № 123 от 15.05.16 г., за хозтовары Сумма 93776-96В т.ч. НДС(18%) 14304-964 НазначениеПлатежа1=Оплата по счету № 123 от 15.05.16 г., за хозтовары НазначениеПлатежа2=Сумма 93776-96 НазначениеПлатежа3=В т.ч. НДС(18%) 14304-96 КонецДокумента СекцияДокумент=Платежное поручение Номер=318 Дата=02.06.2016 Сумма=10000.96 ПлательщикСчет=45454545454554500098 Плательщик1=Общество с ограниченной ответственностью научно-производственная фирма "Пром" ПлательщикРасчСчет=4070281040012045454445 ПлательщикБанк1=Филиал "Московский" АКИБ "ОБРАЗОВАНИЕ" (АО) ПлательщикБИК=456456456 ПлательщикКорсчет=4565464564564564564 ПолучательСчет=45454545454554500098 Получатель=ИНН 6744002766 "О "ПРИБОР" ПолучательИНН=4567787888 Получатель1=2 фирма ПолучательРасчСчет=40502810859020100011 ПолучательБанк1=ОТДЕЛЕНИЕ N649 СБЕРБАНКА РОССИИ ПолучательБанк2=Г. МОЛ ПолучательБИК=046454542 ПолучательКорсчет=30101810000000000732 ВидПлатежа=Электронно ВидОплаты=01 ПлательщикКПП=5910101100 ПолучательКПП=673101011 Очередность=5 НазначениеПлатежа=Оплата по счету № 456 от 01.06.16 г., за товары Сумма 10000.96В т.ч. НДС(18%) 304-964 НазначениеПлатежа1=Оплата по счету № 456 от 01.06.16 г., за товары НазначениеПлатежа2=Сумма 10000.96 НазначениеПлатежа3=В т.ч. НДС(18%) 14304-96 КонецДокумента СекцияДокумент=Платежное поручение Номер=319 Дата=02.06.2016 Сумма=15000.96 ПлательщикСчет=45454545454554500098 Плательщик1=Общество с ограниченной ответственностью научно-производственная фирма "Пром" ПлательщикРасчСчет=4070281040012045454445 ПлательщикБанк1=Филиал "Московский" АКИБ "ОБРАЗОВАНИЕ" (АО) ПлательщикБИК=456456456 ПлательщикКорсчет=4565464564564564564 ПолучательСчет=45454545454554500098 Получатель=ИНН 6744002766 "О "ПРИБОР" ПолучательИНН=4567787888 Получатель1=3 фирма ПолучательРасчСчет=40502810859020100011 ПолучательБанк1=ОТДЕЛЕНИЕ N649 СБЕРБАНКА РОССИИ ПолучательБанк2=Г. МОЛ ПолучательБИК=046454542 ПолучательКорсчет=30101810000000000732 ВидПлатежа=Электронно ВидОплаты=01 ПлательщикКПП=5910101100 ПолучательКПП=673101011 Очередность=5 НазначениеПлатежа=Оплата по счету № 789 от 05.05.16 г., за канцтовары Сумма 15000.96 В т.ч. НДС(18%) 304-964 НазначениеПлатежа1=Оплата по счету № 789 от 05.05.16 г., за канцтовары НазначениеПлатежа2=Сумма 15000.96 НазначениеПлатежа3=В т.ч. НДС(18%) 304-96 КонецДокумента КонецФайла необходимо прочитать данный текстовый файл создать столбцы Номер | Дата | Сумма | Получатель1 | НазначениеПлатежа1 и вставить соответствующие значения в эти столбцы построчно. как вариант из приведённого примера в listview получится что то типа этого Код:
Номер | Дата | Сумма | Получатель1 | НазначениеПлатежа1 317 | 02.06.2016| 93477.96 | 1 фирма | Оплата по счету № 123 от 15.05.16 г., за хозтовары 318 | 02.06.2016| 10000.96 | 2 фирма | Оплата по счету № 456 от 01.06.16 г., за товары 319 | 02.06.2016| 15000.96 | 3 фирма | Оплата по счету № 789 от 05.05.16 г., за канцтовары Кто сможет помочь с обработкой этого текста? |
#2
|
||||
|
||||
Можно распарсить средствами регспы, а можно и самостоятельно, примерно вот так
Код:
var listDoc: array of TStrings; txtAll: TStrings; i, b: integer; flg: boolean; lit:TListItem; begin i:= 0; b:= 0; txtAll:= TStringList.Create; txtAll.LoadFromFile('text.txt'); flg:= false; while i < txtAll.Count do begin if txtAll[i] = 'СекцияДокумент=Платежное поручение' then begin flg:= true; SetLength(listDoc, b+1); listDoc[b]:= TStringList.Create; end; if (flg) and (txtAll[i] = 'КонецДокумента') then begin flg:= false; inc(b); end; if flg then listDoc[b].Add(txtAll[i]); inc(i); end; for i := 0 to High(listDoc) do for b:= 0 to listDoc[i].Count-1 do begin if Copy(listDoc[i][b],1, 6) = 'Номер='then begin lit:= ListView1.Items.Add; lit.Caption:=Copy(listDoc[i][b],7,Length(listDoc[i][b])); end; if Copy(listDoc[i][b],1, 5) = 'Дата='then lit.SubItems.Add(Copy(listDoc[i][b],6,Length(listDoc[i][b]))); if Copy(listDoc[i][b],1, 6) = 'Сумма='then lit.SubItems.Add(Copy(listDoc[i][b],7,Length(listDoc[i][b]))); if Copy(listDoc[i][b],1, 12) = 'Получатель1='then lit.SubItems.Add(Copy(listDoc[i][b],13,Length(listDoc[i][b]))); if Copy(listDoc[i][b],1, 19) = 'НазначениеПлатежа1='then lit.SubItems.Add(Copy(listDoc[i][b],20,Length(listDoc[i][b]))); end; txtAll.Free; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
djmix (06.10.2016)
|
#3
|
||||
|
||||
Забыл про освобождение ресурсов, после txtall.free следует добавить
Код:
... for i := High(listDoc) downto 0 do listDoc[i].Free; ... З.Ы. Хорошая мысля приходит опосля вот однопроходной вариант, без накопления: Код:
var i: integer; txtAll: TStrings; lit:TListItem; begin txtAll:= TStringList.Create; txtAll.LoadFromFile('text.txt'); for i := 0 to txtAll.Count-1 do begin if Copy(txtAll[i],1, 6) = 'Номер=' then begin lit:= ListView1.Items.Add; lit.Caption:= Copy(txtAll[i], 7, Length(txtAll[i])); end; if Copy(txtAll[i], 1, 5) = 'Дата=' then lit.SubItems.Add(Copy(txtAll[i], 6, Length(txtAll[i]))); if Copy(txtAll[i], 1, 6) = 'Сумма=' then lit.SubItems.Add(Copy(txtAll[i], 7, Length(txtAll[i]))); if Copy(txtAll[i], 1, 12) = 'Получатель1=' then lit.SubItems.Add(Copy(txtAll[i],13, Length(txtAll[i]))); if Copy(txtAll[i], 1, 19) = 'НазначениеПлатежа1=' then lit.SubItems.Add(Copy(txtAll[i], 20,Length(txtAll[i]))); end; txtAll.Free; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 07.10.2016 в 15:14. |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
djmix (06.10.2016)
|