Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Выборочное копирование из текстового файла. (http://forum.oszone.net/showthread.php?t=229928)

odin1 09-03-2012 18:00 1875620

Выборочное копирование из текстового файла.
 
Уважаемые эксперты! Помогите пожалуйста в написании скрипта.

Задача такая: есть файл, который представляет из себя переведенный в текст XML файл с курсами валют ЦБ.
Он имеет примерно такой вид:

<?xml version="1.0" encoding="windows-1251" ?>
<ValCurs Date="08.03.2012" name="Foreign Currency Market">
<Valute ID="R01010">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>1</Nominal>
<Name>Австралийский доллар</Name>
<Value>31,3291</Value>
</Valute>
<Valute ID="R01020A">
<NumCode>944</NumCode>
<CharCode>AZN</CharCode>
<Nominal>1</Nominal>
<Name>Азербайджанский манат</Name>
<Value>37,7813</Value>
</Valute>
<Valute ID="R01035">
<NumCode>826</NumCode>
<CharCode>GBP</CharCode>
<Nominal>1</Nominal>
<Name>Фунт стерлингов Соединенного королевства</Name>
<Value>46,6466</Value>
</Valute>
<Valute ID="R01060">
<NumCode>051</NumCode>
<CharCode>AMD</CharCode>
<Nominal>1000</Nominal>
<Name>Армянских драмов</Name>
<Value>76,2522</Value>
</Valute>
<Valute ID="R01090">
<NumCode>974</NumCode>
<CharCode>BYR</CharCode>
<Nominal>10000</Nominal>
<Name>Белорусских рублей</Name>
<Value>36,2617</Value>
</Valute>
<Valute ID="R01100">
<NumCode>975</NumCode>
<CharCode>BGN</CharCode>
<Nominal>1</Nominal>
<Name>Болгарский лев</Name>
<Value>19,9248</Value>
</Valute>
<Valute ID="R01115">
<NumCode>986</NumCode>
<CharCode>BRL</CharCode>
<Nominal>1</Nominal>
<Name>Бразильский реал</Name>
<Value>16,8688</Value>
</Valute>
<Valute ID="R01135">
<NumCode>348</NumCode>
<CharCode>HUF</CharCode>
<Nominal>100</Nominal>
<Name>Венгерских форинтов</Name>
<Value>13,2467</Value>
</Valute>
<Valute ID="R01215">
<NumCode>208</NumCode>
<CharCode>DKK</CharCode>
<Nominal>10</Nominal>
<Name>Датских крон</Name>
<Value>52,4204</Value>
</Valute>
<Valute ID="R01235">
<NumCode>840</NumCode>
<CharCode>USD</CharCode>
<Nominal>1</Nominal>
<Name>Доллар США</Name>
<Value>29,6621</Value>
</Valute>
<Valute ID="R01239">
<NumCode>978</NumCode>
<CharCode>EUR</CharCode>
<Nominal>1</Nominal>
<Name>Евро</Name>
<Value>38,9938</Value>
</Valute>
и т.д.

Необходимо извлечь из него значения курсов доллара и евро и перенести их в другой текстовый файл в виде:

USD29.66
EUR38.99

Буду очень благодарен за любую подсказку.

Foreigner 09-03-2012 20:10 1875699

Код:

@echo off
setlocal

for %%i in (USD EUR) do (

    for /f "tokens=1 delims=:" %%j in (' findstr /n "%%i" 1.txt ') do call:result %%j %%i

)
goto:eof

:result

set /a skip=%1+2
for /f "skip=%skip% tokens=1,2 delims=><" %%i in ( 1.txt ) do set "%%i=%%j" && goto:echo

:echo
1>>result.txt echo %2%value:~0,-2%

PS. Вариант на PowerShell для получения текущих курсов:
Код:

# get-currency.ps1

$date = get-date -format "dd/MM/yyyy"

$xml = new-object xml
$xml.load("http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date")

"$($xml.ValCurs.Date) $($xml.ValCurs.name)"

$result = @()
$xml.ValCurs.Valute | % {

    $valute = @{}
   
    $valute.Code = $_.CharCode
    $valute.Name = $_.Name
    $valute.Nominal = $_.Nominal
    $valute.Value = $_.Value

    $result += $(new-object psobject -p $valute)
 
}

$result | ft Name, Code, Nominal, Value -auto


odin1 09-03-2012 21:11 1875741

Большое спасибо, что откликнулись!
К сожалению не могу понять, что не так. Но в результате только USD~0,-2.

Iska 09-03-2012 21:17 1875744

odin1, возьмите лучше приведённый код на PowerShell. Там Вам сразу и загрузка, и вывод. Результат можно и отфильтровать, и вывести в файл.

Foreigner 09-03-2012 21:26 1875752

odin1,
А в исходном файле нет отступов (пробелов)? Например:
Код:

Вместо:
<Value>29,6621</Value>
Есть:
    <Value>29,6621</Value>

Я исходил из приведенного куска. Если есть пробелы, то надо исправить:
Код:

...
for /f "skip=%skip% tokens=2,3 delims=><" %%i ...
...


odin1 09-03-2012 22:00 1875781

Спасибо огромное! Действительно, я не обратил внимания, что эти пробелы исчезли при копировании. Сейчас все работает великолепно! Еще раз балагодарю!


Время: 17:47.

Время: 17:47.
© OSzone.net 2001-