Прихожая    Гостиная    Кабинет    Библиотека    Детская    Выход
  Конвертор расходов (версия для печати)  

<!-- о скрипте -->

Собственно говоря данный скрипт не делает ничего сложно и он очень приметивен. Зато он отображает как использование Perl'а на локальных машинах может облегчить вам жизнь.


Суть работы:
  1. При запуске скрипт спрашивает имя файла.
    Предполагается, что исходный файл имеет имя вида "Axxxxx.exp", где xxxxx - произвольный набор цифр. Таков формат экспортного документа из БД. Так вот, скрипт спрашивает только эти саммые цифры.
  2. Потом подставляет остальное.
  3. Считывает файл (с пятой строки, пропуская все ненужное)
  4. Разбивает в массив.
  5. Переставляет нужные столбцы местами.
  6. Создает новый файл и записывает в него измененные строки.
  7. Удаляет исходный файл.

Исходный код:
Каждая строка этого файла не содержит переносов. Что бы вы могли его правильно собрать, я их пронумеровал.
  1. #!/usr/bin/perl
  2.  
  3.  
  4. print "Input file-name (whithout 'A' & '.exp'!)\n";
  5. $file= <STDIN>;
  6. $ext=".exp";
  7. $convfile="newfile";
  8. $stop=1;
  9. chomp($file);
  10.  
  11. open (FILE, "<A$file$ext") || die "Can't open file $file$ext: \n $! \nand\n $^E";
  12.   @line=;
  13. close (FILE);
  14. open (FILE, ">$convfile$ext") || die "Can't create file $convfile$ext: \n $! \nand\n $^E";
  15.  for ($i=0;$i<$#line;$i++) {
  16.   if ($i>=5 && $line[$i]=~ /\#\#/ && $stop) {$stop=0;}
  17.   if ($i>=5 && $stop) {
  18.    ($ID,$GoodsID,$GoodsName,$ProducerID,$ProducerName,$SeriaID,$SerialNo,$BestBefore,$SOQNo,$SOQDate,$RegSertNo,$RegSertDate,$RegExpired,$Price,$CurrencyID,$CurrencyAbbr,$DutySum,$DutySum2,$IncomeNDS,$RealPrice,$CustPrice,$PurchPrice,$SellPrice,$EndPrice,$AVCoef,$AVTCoef,$Quantity,$SummaNDS,$Summa,$Dim,$Capacity)=split('\|',$line[$i]);
  19.    print FILE "$ID|$GoodsID|$GoodsName|$ProducerID|$ProducerName|$SeriaID|$SerialNo|$BestBefore|$SOQNo|$SOQDate|$RegSertNo|$RegSertDate|$RegExpired|$PurchPrice|$CurrencyID|$CurrencyAbbr|$DutySum|$DutySum2|$IncomeNDS|$SellPrice|$Price|$RealPrice|$CustPrice|$EndPrice|$AVCoef|$AVTCoef|$Quantity|$SummaNDS|$Summa|$Dim|$Capacity";
  20.   } else {
  21.    print FILE "$line[$i]";
  22.  }
  23. }
  24. close (FILE);
  25. unlink ("A$file$ext");

Пример файла (A59647.exp):
Каждая строка этого файла не содержит переносов. Что бы вы могли его правильно собрать, я их пронумеровал.
  1. ## Расходная накладная - импортировать в приход
  2. #1DocID|DocNo|DocDate|BookDate|OwnerID|OwnerName|CustomerID|CustomerName|Summa|SummaNDS|AVTMode|AVTBase|PayMode|PayDate|RPerson|LANo|LADate|Comments
  3. 59647| 871 |04.03.2003|04.03.2003|1516|ШАНГЛІ УКРАЇНА, ТОВ, м. Харків|1878|Артель "Напрасный труд", ТОВ, м. Харків|47.7700|0.0000|1|2|0|11.03.2003||||(по заявке № 7329/)
  4. ##
  5. #2ID|GoodsID|GoodsName|ProducerID|ProducerName|SeriaID|SerialNo|BestBefore|SOQNo|SOQDate|RegSertNo|RegSertDate|RegExpired|Price|CurrencyID|CurrencyAbbr|DutySum|DutySum2|IncomeNDS|RealPrice|CustPrice|PurchPrice|SellPrice|EndPrice|AVCoef|AVTCoef|Quantity|SummaNDS|Summa|Dim|Capacity
  6. 325002|14114|Горпилс апельсин лед. д/рас №8|3281|ДЖЕПАК, Индия|26301|GOR-2021|01.08.2005|FPR/GOR-2021|06.09.2002|Р,03,02/04375|12.03.2002|06.03.2007|1.4900|4|ГРН|0.0000|0.0000|0.0000|1.1200|1.4900|1.4900|1.2700|0.0000|-15.000|0.000|2.000|0.0000|2.5400|УП|600
  7. 325003|14115|Горпилс лимон лед. д/рас №8|3281|ДЖЕПАК, Индия|26302|GLE-2027|01.07.2005|FPR/GLE-2027|02.09.2002|Р,03,02/04375|12.03.2002|06.03.2007|1.4900|4|ГРН|0.0000|0.0000|0.0000|1.1200|1.4900|1.4900|1.2700|0.0000|-15.000|0.000|2.000|0.0000|2.5400|УП|600
  8. 325004|14116|Горпилс лимон-медовые лед. д/рас №8|3281|ДЖЕПАК, Индия|26303|GHL-2026|01.08.2005|FPR/GHL-2026|07.09.2002|Р,03,02/04375|12.03.2002|06.03.2007|1.4900|4|ГРН|0.0000|0.0000|0.0000|1.1300|1.4900|1.4900|1.2700|0.0000|-15.000|0.000|3.000|0.0000|3.8100|УП|600
  9. 325005|14117|Горпилс метол-эвкалипт лед. д/рас №8|3281|ДЖЕПАК, Индия|26304|GME-2011|01.08.2005|FPR/GME-2011|05.09.2002|Р,03,02/04375|06.03.2002|06.03.2007|1.4900|4|ГРН|0.0000|0.0000|0.0000|1.1200|1.4900|1.4900|1.2700|0.0000|-15.000|0.000|2.000|0.0000|2.5400|УП|600
  10. 325000|13738|Максамин Форте №100|2685|АНГЛО-ФРЕНЧ ДРАГС ЭНД ИНДАСТРИЗ ЛИМИТЕД, ИНДИЯ|18501|01201-PE|31.01.2004|ARN:FE2/029|11.02.2002|Р.01.01/02664||18.01.2006|27.5000|4|ГРН|0.0000|0.0000|0.0000|23.4800|27.5000|27.5000|23.3800|0.0000|-15.000|0.000|1.000|0.0000|23.3800|УП|70
  11. 325001|13986|Салмодил сироп 100 мл №1|3051|FDC Limited, Индия|21786|DLW 2031|01.02.2004|209|01.03.2002|P.02.02/04324||15.02.2007|3.9300|4|ГРН|0.0000|0.0000|0.0000|3.9300|3.9300|5.0800|4.3200|0.0000|-15.000|0.000|3.000|0.0000|12.9600|УП|50
  12. ##
  13. #3Name|Bank|Account|MFO|OKPO|Address|Phones|Faxes|TaxIDNo|TaxSertNo|ContractNo|ContractDate|LicenseNo
  14. ШАНГЛІ УКРАЇНА, ТОВ, м. Харків|Харьковское ГРУ "ПриватБанк"|26006278519001|351533|24660391|Україна, 61126, м. Харків, вул. Маршала Конєва, 21|14-38-02|14-38-01|246603920355|29422048|||АА248855
  15. ##
  16. #4Name|Bank|Account|MFO|OKPO|Address|Phones|Faxes|TaxIDNo|TaxSertNo|ContractNo|ContractDate|LicenseNo
  17. Артель "Напрасный труд", ТОВ, м. Харків|Ком. відд. УСБ, м. Харків|000000000000|000000|00000000|Україна, 61153, м. Харків, пр. Ххххххххххххх, 00|00-00-00|00-00-00|000000000000|00000000|||АА000000
<!-- спасибо! -->
: BBCode
: HTML


<!-- внимание! -->
  • Код, текст и фотографии размещенные на этом сайте принадлежат их автору - Сапронову Артёму Александровичу.
  • Допускается использование материалов сайта в личных целях.
  • Приветствуется распространение с обязательным указанием активной гиперссылки на страницу, с которой взят материал.
  • Запрещается внесение изменений в исходный текст (в том числе синонимизация и рерайт).
  • Использование материалов сайта в коммерческих целях без согласования с автором запрещено.
  • Обращайте внимание на даты. Некоторые страницы морально устарели.
  • Автор не несет отвественности за любые возможные последствия связанные с использованием материалов сайта.
  • С предложениями, замечаниями или пожеланиями обращайтесь по email.

© 13.11.2002 Артем Сапронов
http://www.sapronov.com


 
  » Вверх  
Иметь врагов - древнейшая привычка человека, а следовательно и сильнейшая его потребность.
[ НИТЦШЕ, Фридрих ]