Компьютерный форум 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=285104)

Grafitchic 15-07-2014 14:20 2376782

Выделить из строки текста слово определенной длины и записать в переменную
 
здравствуйте!

есть задача загрузить через powershell файл и преобразовать его в csv вида:

N;C1;C7;C30;C90;C180;C360
1; 7.28; 7.54; 8.05; 8.58; 8.93; 9.19
2….

сам файл имеет примерно такую структуру:

<Record Code="1" Date="07/07/2014"><C1>7.28</C1><C7>7.54</C7><C30>8.05</C30><C90>8.58</C90><C180>8.93</C180><C360>9.19</C360></Record>
<Record Code="2" Date="07/07/2014"><C1>7.89</C1><C7>8.22</C7><C30>9.00</C30><C90>9.41</C90><C180>9.81</C180><C360>10.19</C360>></Record>

возник вопрос: как из строки выделить номер кода (code="1"), значения между <C1>...</C1> и вывести их в csv с заданным видом

Kazun 15-07-2014 14:37 2376789

Приведите полный формат файла, возможно это xml.

Код:

[xml]$xml = @"
<?xml version="1.0"?>
<Records>
<Record Code="1" Date="07/07/2014"><C1>7.28</C1><C7>7.54</C7><C30>8.05</C30><C90>8.58</C90><C180>8.93</C180><C360>9.19</C360></Record>
<Record Code="2" Date="07/07/2014"><C1>7.89</C1><C7>8.22</C7><C30>9.00</C30><C90>9.41</C90><C180>9.81</C180><C360>10.19</C360>></Record>
</Records>
"@

PS > $xml.Records.Record


Code : 1
Date : 07/07/2014
C1  : 7.28
C7  : 7.54
C30  : 8.05
C90  : 8.58
C180 : 8.93
C360 : 9.19

Code  : 2
Date  : 07/07/2014
C1    : 7.89
C7    : 8.22
C30  : 9.00
C90  : 9.41
C180  : 9.81
C360  : 10.19
#text : >

PS >  $xml.Records.Record | convertto-csv -Delimiter ";" -NoTypeInformation
"Code";"Date";"C1";"C7";"C30";"C90";"C180";"C360"
"1";"07/07/2014";"7.28";"7.54";"8.05";"8.58";"8.93";"9.19"
"2";"07/07/2014";"7.89";"8.22";"9.00";"9.41";"9.81";"10.19"


Grafitchic 15-07-2014 14:44 2376792

так и есть, это xml-файл

Код:

<?xml version="1.0" encoding="windows-1251" ?>                                                                         
----------------------------------------------                                                                         
<MKR FromDate="20140707" ToDate="20140707" name="Interbank Credit Market">                                             
<Record Date="07/07/2014" Code="1" >                                                                                   
<C1>7.28</C1>                                                                                                         
<C7>7.54</C7>                                                                                                         
<C30>8.05</C30>                                                                                                       
<C90>8.58</C90>                                                                                                       
<C180>8.93</C180>                                                                                                     
<C360>9.19</C360>                                                                                                     
</Record>                                                                                                             
<Record Date="07/07/2014" Code="2" >                                                                                   
<C1>7.89</C1>                                                                                                         
<C7>8.22</C7>                                                                                                         
<C30>9.00</C30>                                                                                                       
<C90>9.41</C90>                                                                                                       
<C180>9.81</C180>                                                                                                     
<C360>10.19</C360>                                                                                                     
</Record>                                                                                                             
<Record Date="07/07/2014" Code="3" >                                                                                   
<C1>7.75</C1>                                                                                                         
<C7>10.07</C7>                                                                                                         
<C30>8.25</C30>                                                                                                       
<C90>10.58</C90>                                                                                                       
<C180>9.82</C180>                                                                                                     
<C360>10.15</C360>                                                                                                     
</Record>                                                                                                             
<Record Date="07/07/2014" Code="4" >                                                                                   
<C1>7.68</C1>                                                                                                         
<C7>-</C7>                                                                                                             
<C30>-</C30>                                                                                                           
<C90>-</C90>                                                                                                           
<C180>-</C180>                                                                                                         
<C360>-</C360>                                                                                                         
</Record>                                                                                                             
<Record Date="07/07/2014" Code="5" >                                                                                   
<C1>180659.39</C1>                                                                                                     
<C7>317.60</C7>                                                                                                       
<C30>5.20</C30>                                                                                                       
<C90>300.00</C90>                                                                                                     
<C180>2160.00</C180>                                                                                                   
<C360>480.00</C360>                                                                                                   
</Record>                                                                                                             
<Record Date="07/07/2014" Code="6" >                                                                                   
<C1>48704.00</C1>                                                                                                     
<C7>-</C7>                                                                                                             
<C30>-</C30>                                                                                                           
<C90>-</C90>                                                                                                           
<C180>-</C180>                                                                                                         
<C360>-</C360>                                                                                                         
</Record>                                                                                                             
<Record Date="07/07/2014" Code="7" >                                                                                   
<C1>7.81</C1>                                                                                                         
<C7>12.00</C7>                                                                                                         
<C30>-</C30>                                                                                                           
<C90>-</C90>                                                                                                           
<C180>-</C180>                                                                                                         
<C360>-</C360>                                                                                                         
</Record>                                                                                                             
<Record Date="07/07/2014" Code="8" >                                                                                   
<C1>15228.80</C1>                                                                                                     
<C7>160.00</C7>                                                                                                       
<C30>-</C30>                                                                                                           
<C90>-</C90>                                                                                                           
<C180>-</C180>                                                                                                         
<C360>-</C360>                                                                                                         
</Record>                                                                                                             
                                                                                                                       
</MKR>


Kazun 15-07-2014 14:47 2376794

Код:

[xml](Get-Content file.xml) | Foreach {$_.MKR.Record} | Export-Csv -NoTypeInformation -Delimiter ";" result.csv
Только убрать из xml - ----------------------------------------------

Grafitchic 15-07-2014 14:47 2376795

спасибо за помощь!

Grafitchic 15-07-2014 15:02 2376808

есть небольшая проблемка

при сохранении в формате csv итог получается такой:

Date Code C1 C7 C30 C90 C180 C360
07.07.2014 1 июл.28 июл.54 08.май авг.58 авг.93 сен.19
07.07.2014 2 июл.89 авг.22 9.00 сен.41 сен.81 окт.19
07.07.2014 3 июл.75 10.июл авг.25 окт.58 сен.82 окт.15
07.07.2014 4 июл.68 - - - - -
07.07.2014 5 180659.39 317.60 май.20 300.00 2160.00 480.00
07.07.2014 6 48704.00 - - - - -
07.07.2014 7 июл.81 12.00 - - - -
07.07.2014 8 15228.80 160.00 - - - -

вместо значений c1 ... c360 в некоторых местах стоит дата, а остальные значения не совпадают

здесь уже нужно бороться с форматом ячеек в excel?

Kazun 15-07-2014 15:18 2376812

1) Открываем excel
2) Открыть файл - выбираем csv
3) Запустится мастер текстов
  • Шаг 1 - Далее
  • Шаг 2 - выбираем символ - разделителя точка с запятой
  • Шаг 3 - Выбираем столбец и выставляем тип текстовый, и так для всех столбцов.

Grafitchic 15-07-2014 15:30 2376817

при выборе csv, excel сразу открывает его и не вызывает мастер текстов

Kazun 15-07-2014 15:38 2376819

http://it.kgsu.ru/MSExcel/excel161.html

Grafitchic 15-07-2014 15:38 2376820

всё в порядке, разобрался. kazun, благодарю за помощь.

Grafitchic 16-07-2014 11:42 2377180

пока не закрыли тему задам еще вопрос: можно ли в поле date заносить дату текущего дня, то есть дня, когда скачали этот xml-файл, а не когда он был создан?

допустим, если в переменной $Url = "http://www.cbr.ru/scripts/xml_mkr.asp?date_req1=07/07/2014&date_req2=07/07/2014" поменять ширину даты, допустим с 1.07.14 по 7.07. 14, то он выдает даты создания этих документов. мне же нужно, чтобы он выдавал сегоднешнее число.

Kazun 16-07-2014 11:48 2377184

Код:

$date = (Get-Date).ToString("dd\/MM\/yyyy")
$Url = "http://www.cbr.ru/scripts/xml_mkr.asp?date_req1=$date&date_req2=$date"


Grafitchic 16-07-2014 12:08 2377191

видимо, я немного неправильно выразился.

как я понимаю, при таком добавлении он будет выводить xml-файл созданный этим днем.

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

может есть вариант добавить в csv файл еще один столбец с указанием текущей даты?

Kazun 16-07-2014 12:14 2377193

Код:

... Foreach .... | Add-Member -MemberType NoteProperty -Name ToDay -Value (Get-Date).ToString("dd\/MM\/yyyy") -PassThru | Export....

Grafitchic 16-07-2014 12:23 2377195

то, что нужно! на этом всё, не смею больше беспокоить. ещё раз моя тебе благодарность, kazun.


Время: 00:33.

Время: 00:33.
© OSzone.net 2001-