Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.10.2016, 12:22
djmix djmix вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
Вопрос заполнение по столбцам в 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  
Старый 05.10.2016, 18:23
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Можно распарсить средствами регспы, а можно и самостоятельно, примерно вот так
Код:
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;
Вложения
Тип файла: zip pars1C.zip (3.3 Кбайт, 5 просмотров)
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
djmix (06.10.2016)
  #3  
Старый 06.10.2016, 08:26
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Забыл про освобождение ресурсов, после 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)
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter