|
|
|
| Здравствуйте. Помогите составить блок if'ов с регулярными выражениями которые будут проверять какой тип таблицы курса используется. Имеется переменная $t в которой хранится таблица курсов. Все стандартны таблиц тут http://estandards.ru/index.php?title=%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_%D1%84%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D1%8D%D0%BA%D1%81%D0%BF%D0%BE%D1%80%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0_%D1%81_%D0%BA%D1%83%D1%80%D1%81%D0%B0%D0%BC%D0%B8_%D0%BE%D0%B1%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BF%D1%83%D0%BD%D0%BA%D1%82%D0%B0.
То есть нужно проверить: Если в переменной $t структура данных следующая:
<rates>
<item>
<from>*</from>
<to>*</to>
<in>*</in>
<out>*</out>
<amount>*</amount>
</item>
то вывести XML, а если *;*;*;*;* то TXT | |
|
|
|
|
|
|
|
для: pavluxa09
(03.01.2010 в 17:59)
| | Хм... может просто проверить существование подстроки "<rates>"?
<?php
if(strpos($t, "<rates>") !== false) echo "XML";
else echo "TXT";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(03.01.2010 в 19:04)
| | нето | |
|
|
|
|
|
|
|
для: pavluxa09
(03.01.2010 в 20:04)
| | Тогда необходимо уточнение критериев проверки. | |
|
|
|
|
|
|
|
для: cheops
(03.01.2010 в 20:43)
| | 1. Если это таблица XML тогда в ней должны открываться и закрываться теги: <rates> <item> <from> <to> <in> <out> <amount>, а также между тегами <in> <out> <amount> должно быть число (целое или дробное через точку). Таблица XML может иметь свой вид следующий:
<rates>
<item>
<from>Webmoney USD</from>
<to>Webmoney RUB</to>
<in>1</in>
<out>23.628812</out>
<amount>10000.23</amount>
</item>
<item>
<from>WMZ</from>
<to>WMR</to>
<in>1</in>
<out>23.628812</out>
<amount>10000.23</amount>
</item>
<item>
<from>001</from>
<to>002</to>
<in>1</in>
<out>23.628812</out>
<amount>10000.23</amount>
</item>
</rates>
|
2. Если это таблица типа TXT, тогда в ней обязательно должно быть в каждой строке следующая структура *;*;*;*;*
Место трёх последних звёздачек может быть число (целое или дробное через точку). А место двух первых символы(до 12 возможно с пробелом). Таблица такого типа может иметь следующий вид:
Webmoney USD;Webmoney RUB;1;23.628812;10000.23
WMZ;WMR;1;23.628812;10000.23
001;002;1;23.628812;10000.23
|
3. Если таблица типа TXT2, тогда в ней должно быть в каждой строке следующая структура: Валюта -> Валюта2: rate=число, reserve=число
Там числа целые или дробные с точкой.
Таблица такого типа может иметь следующий вид:
WebMoney USD -> WebMoney RUR: rate=0.0333960065055, reserve=0
WMZ -> WMR: rate=1.44143, reserve=0
0001 -> 002: rate=0.0191799420155, reserve=0
|
4. Если таблицы типа TXT3, тогда в ней в каждой строке должна быть следующая структура: *,*,*,*;
Где место первых двух звёздочек может быть валюта, а место последних двух число (целое или дробное через точку). Пример такой таблицы:
1,2,0.0333960065055,0;
1,3,1.44143,0;
1,20,0.0191799420155,0;
1,19 ,0.000420841767704,0;
1,18,0.000356120283187,0;
1,21,37.233945,0;
2,1,32.4672,0;
2,3,44.6664,0;
2,20,3.98371,0;
|
| |
|
|
|
|
|
|
|
для: pavluxa09
(04.01.2010 в 10:10)
| | 1. Можно отталкиваться от следующего скрипта
<?php
$text = "<rates>
<item>
<from>Webmoney USD</from>
<to>Webmoney RUB</to>
<in>1</in>
<out>23.628812</out>
<amount>10000.23</amount>
</item>
<item>
<from>WMZ</from>
<to>WMR</to>
<in>1</in>
<out>23.628812</out>
<amount>10000.23</amount>
</item>
<item>
<from>001</from>
<to>002</to>
<in>1</in>
<out>23.628812</out>
<amount>10000.23</amount>
</item>
</rates>";
$pattern = "|<rates>([\s]*<item>".
"[\s]*<from>(.*?)</from>[\s]*".
"[\s]*<to>(.*?)</to>[\s]*".
"[\s]*<in>([\d.]*?)</in>[\s]*".
"[\s]*<out>([\d.]*?)</out>[\s]*".
"[\s]*<amount>([\d.]*?)</amount>[\s]*".
"</item>[\s]*)+</rates>|is";
if(preg_match($pattern, $text)) echo "Это XML-файл";
else echo "Это не XML-файл";
?>
|
| |
|
|
|
|
|
|
|
для: pavluxa09
(04.01.2010 в 10:10)
| | 2. Можно отталкиваться от следующего скрипта
<?php
$text = "Webmoney USD;Webmoney RUB;1;23.628812;10000.23
WMZ;WMR;1;23.628812;10000.23
001;002;1;23.628812;10000.23";
$pattern = "#(.*?);(.*?);([\d.]*?);([\d.]*?);([\d.]*?)([\s]+|$)#is";
if(preg_match($pattern, $text)) echo "Это CSV-файл";
else echo "Это не CSV-файл";
?>
|
| |
|
|
|
|
|
|
|
для: pavluxa09
(04.01.2010 в 10:10)
| | 4. Можно отталкиваться от следующего скрипта
<?php
$text = "1,2,0.0333960065055,0;
1,3,1.44143,0;
1,20,0.0191799420155,0;
1,19 ,0.000420841767704,0;
1,18,0.000356120283187,0;
1,21,37.233945,0;
2,1,32.4672,0;
2,3,44.6664,0;
2,20,3.98371,0;";
$pattern = "#([\d\s]*?),([\d\s]*?),([\d.]*?),([\d.]*?);#is";
if(preg_match($pattern, $text)) echo "Это TXT3-файл";
else echo "Это не TXT3-файл";
?>
|
| |
|
|
|
|
|
|
|
для: pavluxa09
(04.01.2010 в 10:10)
| | 3. Можно отталкиваться от следующего скрипта
<?php
$text = "WebMoney USD -> WebMoney RUR: rate=0.0333960065055, reserve=0
WMZ -> WMR: rate=1.44143, reserve=0
0001 -> 002: rate=0.0191799420155, reserve=0";
$pattern = "#(.*?)->(.*?):[\s]*rate=[\d.]+,[\s]*reserve=[\d.]*#is";
if(preg_match($pattern, $text)) echo "Это TXT2-файл";
else echo "Это не TXT2-файл";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(04.01.2010 в 14:43)
| | Большое спасибо. То что я хотел. Чуть попоже проверю и скажу результат! | |
|
|
|
|
|
|
|
для: pavluxa09
(04.01.2010 в 18:35)
| | Пожалуйста, помогите извлечь с каждого типа таблицы значения. | |
|
|
|
|
|
|
|
для: pavluxa09
(04.01.2010 в 19:12)
| | После проверки вместо
<?php
if(preg_match($pattern, $text)) echo "Это XML-файл";
?>
|
Подставляйте
<?php
preg_match_all($pattern, $text, $out);
?>
|
$out - будет содержать многомерный массив, элементами которого будут выступать фрагменты, соответствующие круглым скобкам регулярного выражения. | |
|
|
|
|
|
|
|
для: cheops
(04.01.2010 в 20:23)
| | В результате работы мы получаем следующий массив:
(
[0] => Array
(
[0] => <rates>
<item><from>Webmoney USD</from><to>Webmoney RUB</to><in>1</in><out>29.9439</out><amount>0</amount></item>
<item><from>Webmoney USD</from><to>Webmoney EUR</to><in>1.44992</in><out>1</out><amount>0</amount></item>
<item><from>Webmoney USD</from><to>Webmoney UAH</to><in>1</in><out>-51.9407939998</out><amount>0</amount></item>
<item><from>Webmoney USD</from><to>Webmoney UZS</to><in>1</in><out>2371.69</out><amount>0</amount></item>
<item><from>Webmoney USD</from><to>Webmoney BYR</to><in>1</in><out>2797.22</out><amount>0</amount></item>
<item><from>Webmoney USD</from><to>Webmoney Gold</to><in>37.233945</in><out>1</out><amount>0</amount></item>
<item><from>Webmoney RUB</from><to>Webmoney USD</to><in>32.258</in><out>1</out><amount>0</amount></item>
<item><from>Webmoney RUB</from><to>Webmoney EUR</to><in>44.7498</in><out>1</out><amount>0</amount></item>
<item><from>Webmoney RUB</from><to>Webmoney UAH</to><in>3.9788</in><out>1</out><amount>0</amount></item>
</rates>
)
[1] => Array
(
[0] => <item><from>Webmoney RUB</from><to>Webmoney UAH</to><in>3.9788</in><out>1</out><amount>0</amount></item>
)
[2] => Array
(
[0] => Webmoney RUB
)
[3] => Array
(
[0] => Webmoney UAH
)
[4] => Array
(
[0] => 3.9788
)
[5] => Array
(
[0] => 1
)
[6] => Array
(
[0] => 0
)
)
В нём только раскрывается значение первой строки, а нужно всех.
Что делать? | |
|
|
|