Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
ruslanstep1
- мл. сержант
- Сообщения: 92
- Зарегистрирован: 2010-04-14 11:40:46
Непрочитанное сообщение
ruslanstep1 » 2011-09-30 9:30:51
Есть xml фаил такого типа
Код: Выделить всё
<?xml version='1.0' encoding='Cp1251' ?>
<RESULTS>
<ROW>
<COLUMN NAME="AUFINFO2"><![CDATA[ОТН1-072354]]></COLUMN>
<COLUMN NAME="LFAEMPFKDNR"><![CDATA[00787_2]]></COLUMN>
<COLUMN NAME="DATE_TIME"><![CDATA[2011-08-29]]></COLUMN>
<COLUMN NAME="ARTNR"><![CDATA[06527K202]]></COLUMN>
<COLUMN NAME="AUPMGSOLL"><![CDATA[72]]></COLUMN>
<COLUMN NAME="BSTQLF"><![CDATA[10]]></COLUMN>
<COLUMN NAME="DATE_DZUPD"><![CDATA[2011-08-29]]></COLUMN>
</ROW>
</RESULTS>
нужно привести к такому виду
Код: Выделить всё
<?xml version="1.0" encoding="windows-1251"?>
<AxaptaXMLExport xmlns:Table="urn:www.navision.com/Formats/Table" version="1.0">
<transaction version="1.0">
<Table:Record name="NewORDitems" row="1">
<Table:Field name="PickingListId">ОТН1-072354</Table:Field>
<Table:Field name="CustAccount">00787_2</Table:Field>
<Table:Field name="DeliveryDate">2011-08-29</Table:Field>
<Table:Field name="Itemid">06527K202</Table:Field>
<Table:Field name="InventQty">72</Table:Field>
<Table:Field name="InventLocationID">10</Table:Field>
<Table:Field name="ManDate">2011-08-29</Table:Field>
</Table:Record>
</transaction>
</AxaptaXMLExport>
Причем <Table:Record name="NewORDitems" row="1"> меняется row="1" от количества <ROW>.
Пробовал так
#!/bin/bash
cat file.xml |\
sed 's/<ROW>/<Table:Record name=NewORDitems row=1>/g; s/<\/\ROW>/<Table:Record>/g; s/<COLUMN NAME="AUFINFO2"><!\[\CDATA/<Table:Field name="ExternalID">/g; s/\]]><\/\COLUMN>/<\/\Table:Field>/g; s/<COLUMN NAME="LFAEMPFKDNR"><!\[\CDATA/<Table:Field name="CustAccount">/g; s/<COLUMN NAME="DATE_TIME"><!\[\CDATA/<Table:Field name="CustAccount">/g; s/<COLUMN NAME="ARTNR"><!\[\CDATA/<Table:Field name="DeliveryDate">/g; s/<COLUMN NAME="AUPMGSOLL"><!\[\CDATA/<Table:Field name="InventQty">/g; s/<COLUMN NAME="BSTQLF"><!\[\CDATA/<Table:Field name="InventLocationID">/g; s/<COLUMN NAME="DATE_DZUPD"><!\[\CDATA/<Table:Field name="ManDate">/g;' \
>test.xml
Результат
Код: Выделить всё
<RESULTS>
<Table:Record name=NewORDitems row=1>
<Table:Field name="ExternalID">[ОТН1-072354</Table:Field>
<Table:Field name="CustAccount">[00787_2</Table:Field>
<Table:Field name="CustAccount">[2011-08-29</Table:Field>
<Table:Field name="DeliveryDate">[06527K202</Table:Field>
<Table:Field name="InventQty">[72</Table:Field>
<Table:Field name="InventLocationID">[10</Table:Field>
<Table:Field name="ManDate">[2011-08-29</Table:Field>
<Table:Record>
Остается
[
OS Ubuntu
ruslanstep1
-
Хостинг HostFood.ru
-
Хостинг HostFood.ru
Тарифы на хостинг в России, от 12 рублей:
https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.:
https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах:
https://www.host-food.ru/domains/
-
ruslanstep1
- мл. сержант
- Сообщения: 92
- Зарегистрирован: 2010-04-14 11:40:46
Непрочитанное сообщение
ruslanstep1 » 2011-09-30 19:00:55
Это нужно реализовать виде скрипта можно еще такой вариант убрать все теги
ОТН1-072354 00787_2 2011-08-29 06527K202 72 10 2011-08-29
ОТН1-072354 00787_2 2011-08-29 06527K203 73 10 2011-08-29
ОТН1-072354 00787_2 2011-08-29 06527K204 74 10 2011-08-29
и можно от количеств строк будет зависеть <Table:Record name="NewORDitems" row="1">
то есть должно быть что то типо вот этого
Код: Выделить всё
<?xml version="1.0" encoding="windows-1251"?>
<AxaptaXMLExport xmlns:Table="urn:www.navision.com/Formats/Table" version="1.0">
<transaction version="1.0">
<Table:Record name="NewORDitems" row="1">
<Table:Field name="PickingListId">ОТН1-072354</Table:Field>
<Table:Field name="CustAccount">00787_2</Table:Field>
<Table:Field name="DeliveryDate">2011-08-29</Table:Field>
<Table:Field name="Itemid">06527K202</Table:Field>
<Table:Field name="InventQty">72</Table:Field>
<Table:Field name="InventLocationID">10</Table:Field>
<Table:Field name="ManDate">2011-08-29</Table:Field>
</Table:Record>
<Table:Record name="NewORDitems" row="2">
<Table:Field name="PickingListId">ОТН1-072354</Table:Field>
<Table:Field name="CustAccount">00787_2</Table:Field>
<Table:Field name="DeliveryDate">2011-08-29</Table:Field>
<Table:Field name="Itemid">06527K203</Table:Field>
<Table:Field name="InventQty">73</Table:Field>
<Table:Field name="InventLocationID">10</Table:Field>
<Table:Field name="ManDate">2011-08-29</Table:Field>
</Table:Record>
<Table:Record name="NewORDitems" row="3">
<Table:Field name="PickingListId">ОТН1-072354</Table:Field>
<Table:Field name="CustAccount">00787_2</Table:Field>
<Table:Field name="DeliveryDate">2011-08-29</Table:Field>
<Table:Field name="Itemid">06527K204</Table:Field>
<Table:Field name="InventQty">74</Table:Field>
<Table:Field name="InventLocationID">10</Table:Field>
<Table:Field name="ManDate">2011-08-29</Table:Field>
</Table:Record>
</transaction>
</AxaptaXMLExport>
просто мне ни справится без помощи специалистов
ruslanstep1
-
rmn
- старшина
- Сообщения: 427
- Зарегистрирован: 2008-10-03 18:52:02
Непрочитанное сообщение
rmn » 2011-09-30 21:31:58
Код: Выделить всё
remcomp% cat data.xml
<?xml version='1.0' encoding='Cp1251' ?>
<RESULTS>
<ROW>
<COLUMN NAME="AUFINFO2"><![CDATA[OTH1-072354]]></COLUMN>
<COLUMN NAME="LFAEMPFKDNR"><![CDATA[00787_2]]></COLUMN>
<COLUMN NAME="DATE_TIME"><![CDATA[2011-08-29]]></COLUMN>
<COLUMN NAME="ARTNR"><![CDATA[06527K202]]></COLUMN>
<COLUMN NAME="AUPMGSOLL"><![CDATA[72]]></COLUMN>
<COLUMN NAME="BSTQLF"><![CDATA[10]]></COLUMN>
<COLUMN NAME="DATE_DZUPD"><![CDATA[2011-08-29]]></COLUMN>
</ROW>
<ROW>
<COLUMN NAME="AUFINFO2"><![CDATA[OTH1-072354]]></COLUMN>
<COLUMN NAME="LFAEMPFKDNR"><![CDATA[00787_2]]></COLUMN>
<COLUMN NAME="DATE_TIME"><![CDATA[2011-08-29]]></COLUMN>
<COLUMN NAME="ARTNR"><![CDATA[06527K202]]></COLUMN>
<COLUMN NAME="AUPMGSOLL"><![CDATA[72]]></COLUMN>
<COLUMN NAME="BSTQLF"><![CDATA[10]]></COLUMN>
<COLUMN NAME="DATE_DZUPD"><![CDATA[2011-08-29]]></COLUMN>
</ROW>
<ROW>
<COLUMN NAME="AUFINFO2"><![CDATA[OTH1-072354]]></COLUMN>
<COLUMN NAME="LFAEMPFKDNR"><![CDATA[00787_2]]></COLUMN>
<COLUMN NAME="DATE_TIME"><![CDATA[2011-08-29]]></COLUMN>
<COLUMN NAME="ARTNR"><![CDATA[06527K202]]></COLUMN>
<COLUMN NAME="AUPMGSOLL"><![CDATA[72]]></COLUMN>
<COLUMN NAME="BSTQLF"><![CDATA[10]]></COLUMN>
<COLUMN NAME="DATE_DZUPD"><![CDATA[2011-08-29]]></COLUMN>
</ROW>
</RESULTS>
Код: Выделить всё
remcomp% cat script.sh
#!/bin/sh
rowIndex="1"
cat data.xml | awk '{print $1,$2}' |
(
while read v1 v2
do
case $v1 in
"<RESULTS>")
echo "<?xml version=\"1.0\" encoding=\"windows-1251\"?>"
echo "<AxaptaXMLExport xmlns:Table=\"urn:www.navision.com/Formats/Table\" version=\"1.0\">"
echo "<transaction version=\"1.0\">"
;;
"</RESULTS>")
echo "</transaction>"
echo "</AxaptaXMLExport>"
exit
;;
"<ROW>")
echo " <Table:Record name=\"NewORDitems\" row=\"${rowIndex}\">"
;;
"</ROW>")
echo " </Table:Record>"
rowIndex="`expr $rowIndex + 1`"
;;
"<COLUMN")
fieldName=""
echo $v2 | sed -e 's/NAME="//' -e 's/"><!\[CDATA\[/ /' -e 's/\]\]><\/COLUMN>//' |
(
read fieldName fieldValue
case $fieldName in
"AUFINFO2")
fieldName="PickingListId"
;;
"LFAEMPFKDNR")
fieldName="CustAccount"
;;
"DATE_TIME")
fieldName="DeliveryDate"
;;
"ARTNR")
fieldName="Itemid"
;;
"AUPMGSOLL")
fieldName="InventQty"
;;
"BSTQLF")
fieldName="InventLocationID"
;;
"DATE_DZUPD")
fieldName="ManDate"
;;
*)
continue
esac
echo " <Table:Field name=\"${fieldName}\">${fieldValue}</Table:Field>"
)
;;
esac
done
)
Код: Выделить всё
remcomp% ./script.sh
<?xml version="1.0" encoding="windows-1251"?>
<AxaptaXMLExport xmlns:Table="urn:www.navision.com/Formats/Table" version="1.0">
<transaction version="1.0">
<Table:Record name="NewORDitems" row="1">
<Table:Field name="PickingListId">OTH1-072354</Table:Field>
<Table:Field name="CustAccount">00787_2</Table:Field>
<Table:Field name="DeliveryDate">2011-08-29</Table:Field>
<Table:Field name="Itemid">06527K202</Table:Field>
<Table:Field name="InventQty">72</Table:Field>
<Table:Field name="InventLocationID">10</Table:Field>
<Table:Field name="ManDate">2011-08-29</Table:Field>
</Table:Record>
<Table:Record name="NewORDitems" row="2">
<Table:Field name="PickingListId">OTH1-072354</Table:Field>
<Table:Field name="CustAccount">00787_2</Table:Field>
<Table:Field name="DeliveryDate">2011-08-29</Table:Field>
<Table:Field name="Itemid">06527K202</Table:Field>
<Table:Field name="InventQty">72</Table:Field>
<Table:Field name="InventLocationID">10</Table:Field>
<Table:Field name="ManDate">2011-08-29</Table:Field>
</Table:Record>
<Table:Record name="NewORDitems" row="3">
<Table:Field name="PickingListId">OTH1-072354</Table:Field>
<Table:Field name="CustAccount">00787_2</Table:Field>
<Table:Field name="DeliveryDate">2011-08-29</Table:Field>
<Table:Field name="Itemid">06527K202</Table:Field>
<Table:Field name="InventQty">72</Table:Field>
<Table:Field name="InventLocationID">10</Table:Field>
<Table:Field name="ManDate">2011-08-29</Table:Field>
</Table:Record>
</transaction>
</AxaptaXMLExport>
rmn
-
ruslanstep1
- мл. сержант
- Сообщения: 92
- Зарегистрирован: 2010-04-14 11:40:46
Непрочитанное сообщение
ruslanstep1 » 2011-10-01 16:56:34
Спасибо большое все просто супер.
Есть возможность реализации второго условия
ОТН1-072354 00787_2 2011-08-29 06527K202 72 10 2011-08-29
ОТН1-072354 00787_2 2011-08-29 06527K203 73 10 2011-08-29
ОТН1-072354 00787_2 2011-08-29 06527K204 74 10 2011-08-29
и можно от количеств строк будет зависеть <Table:Record name="NewORDitems" row="1">
то есть должно быть что то типо вот этого
Код: Выделить всё
<?xml version="1.0" encoding="windows-1251"?>
<AxaptaXMLExport xmlns:Table="urn:www.navision.com/Formats/Table" version="1.0">
<transaction version="1.0">
<Table:Record name="NewORDitems" row="1">
<Table:Field name="PickingListId">ОТН1-072354</Table:Field>
<Table:Field name="CustAccount">00787_2</Table:Field>
<Table:Field name="DeliveryDate">2011-08-29</Table:Field>
<Table:Field name="Itemid">06527K202</Table:Field>
<Table:Field name="InventQty">72</Table:Field>
<Table:Field name="InventLocationID">10</Table:Field>
<Table:Field name="ManDate">2011-08-29</Table:Field>
</Table:Record>
<Table:Record name="NewORDitems" row="2">
<Table:Field name="PickingListId">ОТН1-072354</Table:Field>
<Table:Field name="CustAccount">00787_2</Table:Field>
<Table:Field name="DeliveryDate">2011-08-29</Table:Field>
<Table:Field name="Itemid">06527K203</Table:Field>
<Table:Field name="InventQty">73</Table:Field>
<Table:Field name="InventLocationID">10</Table:Field>
<Table:Field name="ManDate">2011-08-29</Table:Field>
</Table:Record>
<Table:Record name="NewORDitems" row="3">
<Table:Field name="PickingListId">ОТН1-072354</Table:Field>
<Table:Field name="CustAccount">00787_2</Table:Field>
<Table:Field name="DeliveryDate">2011-08-29</Table:Field>
<Table:Field name="Itemid">06527K204</Table:Field>
<Table:Field name="InventQty">74</Table:Field>
<Table:Field name="InventLocationID">10</Table:Field>
<Table:Field name="ManDate">2011-08-29</Table:Field>
</Table:Record>
</transaction>
</AxaptaXMLExport>
ruslanstep1
-
rmn
- старшина
- Сообщения: 427
- Зарегистрирован: 2008-10-03 18:52:02
Непрочитанное сообщение
rmn » 2011-10-01 18:25:22
ruslanstep1 писал(а):то есть должно быть что то типо вот этого
так это и получается. Смотри пример выше
rmn
-
ruslanstep1
- мл. сержант
- Сообщения: 92
- Зарегистрирован: 2010-04-14 11:40:46
Непрочитанное сообщение
ruslanstep1 » 2011-10-01 19:55:48
Нет иногда нужно просто данные перевести в xml формат.
данные выглядят так
Код: Выделить всё
ОТН1-072354 00787_2 2011-08-29 06527K202 72 10 2011-08-29
ОТН1-072354 00787_2 2011-08-29 06527K203 73 10 2011-08-29
ОТН1-072354 00787_2 2011-08-29 06527K204 74 10 2011-08-29
и их нужно перевести в
Код: Выделить всё
<?xml version="1.0" encoding="windows-1251"?>
<AxaptaXMLExport xmlns:Table="urn:www.navision.com/Formats/Table" version="1.0">
<transaction version="1.0">
<Table:Record name="NewORDitems" row="1">
<Table:Field name="PickingListId">ОТН1-072354</Table:Field>
<Table:Field name="CustAccount">00787_2</Table:Field>
<Table:Field name="DeliveryDate">2011-08-29</Table:Field>
<Table:Field name="Itemid">06527K202</Table:Field>
<Table:Field name="InventQty">72</Table:Field>
<Table:Field name="InventLocationID">10</Table:Field>
<Table:Field name="ManDate">2011-08-29</Table:Field>
</Table:Record>
<Table:Record name="NewORDitems" row="2">
<Table:Field name="PickingListId">ОТН1-072354</Table:Field>
<Table:Field name="CustAccount">00787_2</Table:Field>
<Table:Field name="DeliveryDate">2011-08-29</Table:Field>
<Table:Field name="Itemid">06527K203</Table:Field>
<Table:Field name="InventQty">73</Table:Field>
<Table:Field name="InventLocationID">10</Table:Field>
<Table:Field name="ManDate">2011-08-29</Table:Field>
</Table:Record>
<Table:Record name="NewORDitems" row="3">
<Table:Field name="PickingListId">ОТН1-072354</Table:Field>
<Table:Field name="CustAccount">00787_2</Table:Field>
<Table:Field name="DeliveryDate">2011-08-29</Table:Field>
<Table:Field name="Itemid">06527K204</Table:Field>
<Table:Field name="InventQty">74</Table:Field>
<Table:Field name="InventLocationID">10</Table:Field>
<Table:Field name="ManDate">2011-08-29</Table:Field>
</Table:Record>
</transaction>
</AxaptaXMLExport>
ruslanstep1
-
ruslanstep1
- мл. сержант
- Сообщения: 92
- Зарегистрирован: 2010-04-14 11:40:46
Непрочитанное сообщение
ruslanstep1 » 2011-10-01 19:58:53
rmn писал(а):ruslanstep1 писал(а):то есть должно быть что то типо вот этого
так это и получается. Смотри пример выше
с этим примером все гуд СПАСИБО Ты всегда Выручаешь
ruslanstep1
-
ruslanstep1
- мл. сержант
- Сообщения: 92
- Зарегистрирован: 2010-04-14 11:40:46
Непрочитанное сообщение
ruslanstep1 » 2011-10-02 2:02:44
по поводу второго вопроса решил вроде сам вот код
Код: Выделить всё
#!/bin/sh
echo "<?xml version=1.0 encoding=windows-1251?>"
echo "<AxaptaXMLExport xmlns:Table=\"urn:www.navision.com/Formats/Table\" version=\"1.0\">"
echo "<transaction version=\"1.0\">"
cat 1.txt | awk '{print $1,$2,$3,$4,$5,$6,$7}' | while read v1 v2 v3 v4 v5 v6 v7; do \
rowIndex="`expr $rowIndex + 1`"; \
echo "<Table:Record name=\"NewORDitems\" row=\"${rowIndex}\">"; \
echo "<Table:Field name=\"PickingListId\">$v1</Table:Field>"; \
echo "<Table:Field name=\"CustAccount\">$v2</Table:Field>" ; \
echo "<Table:Field name=\"DeliveryDate\">$v3</Table:Field>" ; \
echo "<Table:Field name=\"Itemid\">$v4</Table:Field>"; \
echo "<Table:Field name=\"InventQty\">$v5</Table:Field>"; \
echo "<Table:Field name=\"InventLocationID\">$v6</Table:Field>" ; \
echo "<Table:Field name=\"ManDate\">$v7</Table:Field>" ; \
echo "</Table:Record>" ;\
done;
echo "</transaction>"
echo "</AxaptaXMLExport>"
ruslanstep1