Что нового

[Данные, строки] Выборка нужных значений из текстовых файлов

arr1val

Новичок
Сообщения
16
Репутация
0
Приветствую.
Требуется отпарсить несколько сотен текстовых файлов(отчеты евереста) из которых вытащить требуемую информацию. К примеру, нужна информация о процессоре, в каждом файле синтаксис строк с параметрами одинаков, только железяки разные, к примеру:
Код:
Суммарная информация,,Системная плата,517,Тип ЦП,DualCore Intel Pentium;
необходим только текст после Тип ЦП, и до ; , т.е. DualCore Intel Pentium
пример 2
Код:
Суммарная информация,,Отображение,523,Видеоадаптер,NVIDIA GeForce 8400 GS  (512 Мб)
необходимо только NVIDIA GeForce 8400 GS

И сложить полученную информацию в текстовый файл формата:
Код:
"Материнка";"DualCore Intel Pentium";"NVIDIA GeForce 8400 GS";"Винт";"и т.д."
где каждый обработанный файл это одна строка, т.е. обработано 200 файлов получился txt на 200 строк.
Может есть у кого похожий пример ? Или подскажите алгоритм.
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
arr1val
Если можно, выложи один отчет сюда в тему...
Для примера...
И еще несколько вопросов:
1. Количество "железок" в отчетах одинаково?
2. Названия каких "железок" нужно вытащить из отчетов?
 
Автор
A

arr1val

Новичок
Сообщения
16
Репутация
0
Файл отчета
Код:
Page,Device,Group,ItemID,Item,Value
Отчёт,,,257,Версия,EVEREST v5.30.1900/ru
Отчёт,,,266,Тестовый модуль,2.4.273.0
Отчёт,,,259,Домашняя страница,http://www.lavalys.com/
Отчёт,,,260,Тип отчёта,Командная строка
Отчёт,,,261,Компьютер,COMPUTERNAME
Отчёт,,,262,Генератор,
Отчёт,,,263,Операционная система,Microsoft Windows XP Professional 5.1.2600 (WinXP RTM)
Отчёт,,,264,Дата,2010-05-07
Отчёт,,,265,Время,12:51
Суммарная информация,,Компьютер,582,Тип компьютера,Многопроцессорный компьютер с ACPI
Суммарная информация,,Компьютер,513,Операционная система,Microsoft Windows XP Professional
Суммарная информация,,Компьютер,540,Пакет обновления ОС,Service Pack 3
Суммарная информация,,Компьютер,564,Internet Explorer,8.0.6001.18702 (IE 8.0)
Суммарная информация,,Компьютер,566,DirectX,4.09.00.0904 (DirectX 9.0c)
Суммарная информация,,Компьютер,514,Имя компьютера,COMPUTERNAME
Суммарная информация,,Компьютер,515,Имя пользователя,username
Суммарная информация,,Компьютер,516,Вход в домен,domainname
Суммарная информация,,Компьютер,0,Дата / Время,2010-05-07 / 12:51
Суммарная информация,,Системная плата,517,Тип ЦП,DualCore Intel Pentium; 1800 MHz
Суммарная информация,,Системная плата,518,Системная плата,Gigabyte GA-G33M-S2  (2 PCI; 1 PCI-E x4; 1 PCI-E x16; 4 DDR2 DIMM; Audio; Video; Gigabit LAN; IEEE-1394)
Суммарная информация,,Системная плата,519,Чипсет системной платы,Intel Bearlake G33
Суммарная информация,,Системная плата,520,Системная память,2048 Мб
Суммарная информация,,Системная плата,521,Тип BIOS,Award Modular (09/07/07)
Суммарная информация,,Системная плата,522,Коммуникационный порт,Последовательный порт (COM1)
Суммарная информация,,Системная плата,522,Коммуникационный порт,Последовательный порт (COM2)
Суммарная информация,,Системная плата,522,Коммуникационный порт,Порт принтера (LPT1)
Суммарная информация,,Отображение,523,Видеоадаптер,NVIDIA GeForce 8400 GS  (512 Мб)
Суммарная информация,,Отображение,524,3D-акселератор,nVIDIA GeForce 8400 GS
Суммарная информация,,Отображение,525,Монитор,LG L1953S  [19" LCD]  (1707237346)
Суммарная информация,,Мультимедиа,526,Звуковой адаптер,Intel 82801IB ICH9 - High Definition Audio Controller [A-2]
Суммарная информация,,Хранение данных,580,Контроллер IDE,Intel(R) ICH9 2 port Serial ATA Storage Controller 1 - 2921
Суммарная информация,,Хранение данных,580,Контроллер IDE,Intel(R) ICH9 2 port Serial ATA Storage Controller 2 - 2926
Суммарная информация,,Хранение данных,580,Контроллер IDE,Стандартный двухканальный контроллер PCI IDE
Суммарная информация,,Хранение данных,581,Контроллер хранения данных,UP55PRT SCSI Controller
Суммарная информация,,Хранение данных,527,Флоппи-накопитель,Дисковод гибких дисков
Суммарная информация,,Хранение данных,528,Дисковый накопитель,Hitachi HDS721616PLA380  (160 Гб; 7200 RPM; SATA-II)
Суммарная информация,,Хранение данных,528,Дисковый накопитель,Hitachi HDT725025VLA380  (250 Гб; 7200 RPM; SATA-II)
Суммарная информация,,Хранение данных,529,Оптический накопитель,Generic DVD-ROM SCSI CdRom Device
Суммарная информация,,Хранение данных,529,Оптический накопитель,HL-DT-ST DVDRAM GSA-4163B  (DVD+R9:4x; DVD+RW:16x/8x; DVD-RW:16x/6x; DVD-RAM:5x; DVD-ROM:16x; CD:40x/24x/40x DVD+RW/DVD-RW/DVD-RAM)
Суммарная информация,,Хранение данных,585,Статус SMART жёстких дисков,Unknown
Суммарная информация,,Разделы,530,C: (NTFS),152617 Мб (102174 Мб свободно)
Суммарная информация,,Разделы,530,D: (NTFS),238464 Мб (27214 Мб свободно)
Суммарная информация,,Разделы,586,Общий объём,381.9 Гб (126.4 Гб свободно)
Суммарная информация,,Ввод,531,Клавиатура,Cherry GmbH USB клавиатура
Суммарная информация,,Ввод,531,Клавиатура,PS/2 Keyboard
Суммарная информация,,Ввод,532,Мышь,Logitech HID-compliant G3/MX518 Optical Mouse
Суммарная информация,,Сеть,538,Первичный адрес IP,192.168.20.198
Суммарная информация,,Сеть,539,Первичный адрес MAC,00-1A-4D-56-15-19
Суммарная информация,,Сеть,534,Сетевой адаптер,3Com EtherLink XL 10/100 PCI For Complete PC Management NIC (3C905C-TX)
Суммарная информация,,Сеть,534,Сетевой адаптер,Realtek RTL8168/8111 PCI-E Gigabit Ethernet NIC  (192.168.20.198)
Суммарная информация,,Периферийные устройства,536,Принтер,Adobe PDF
Суммарная информация,,Периферийные устройства,536,Принтер,Brother MFC-8840D
Суммарная информация,,Периферийные устройства,536,Принтер,Brother PT-9600
Суммарная информация,,Периферийные устройства,536,Принтер,HP DesignJet 500 42 by HP
Суммарная информация,,Периферийные устройства,536,Принтер,Microsoft XPS Document Writer
Суммарная информация,,Периферийные устройства,536,Принтер,pdfFactory Pro
Суммарная информация,,Периферийные устройства,567,Контроллер FireWire,Texas Instruments TSB43AB23 1394A-2000 OHCI PHY/Link-Layer Controller
Суммарная информация,,Периферийные устройства,568,Контроллер USB1,Intel 82801IB ICH9 - USB Universal Host Controller [A-2]
Суммарная информация,,Периферийные устройства,568,Контроллер USB1,Intel 82801IB ICH9 - USB Universal Host Controller [A-2]
Суммарная информация,,Периферийные устройства,568,Контроллер USB1,Intel 82801IB ICH9 - USB Universal Host Controller [A-2]
Суммарная информация,,Периферийные устройства,568,Контроллер USB1,Intel 82801IB ICH9 - USB Universal Host Controller [A-2]
Суммарная информация,,Периферийные устройства,568,Контроллер USB1,Intel 82801IB ICH9 - USB Universal Host Controller [A-2]
Суммарная информация,,Периферийные устройства,568,Контроллер USB1,Intel 82801IB ICH9 - USB Universal Host Controller [A-2]
Суммарная информация,,Периферийные устройства,569,Контроллер USB2,Intel 82801IB ICH9 - USB2 Enhanced Host Controller [A-2]
Суммарная информация,,Периферийные устройства,569,Контроллер USB2,Intel 82801IB ICH9 - USB2 Enhanced Host Controller [A-2]
Суммарная информация,,Периферийные устройства,537,USB-устройство,Cherry GmbH USB клавиатура
Суммарная информация,,Периферийные устройства,537,USB-устройство,Logitech QuickCam IM/Connect #2
Суммарная информация,,Периферийные устройства,537,USB-устройство,Logitech USB G3 (MX518) Optical Mouse
Суммарная информация,,Периферийные устройства,537,USB-устройство,Аудио устройства USB
Суммарная информация,,Периферийные устройства,537,USB-устройство,Запоминающее устройство для USB
Суммарная информация,,Периферийные устройства,537,USB-устройство,Составное USB устройство
Суммарная информация,,DMI,548,DMI поставщик BIOS,Award Software International; Inc.
Суммарная информация,,DMI,549,DMI версия BIOS,F4
Суммарная информация,,DMI,550,DMI производитель системы,Gigabyte Technology Co.; Ltd.
Суммарная информация,,DMI,551,DMI система,G33M-S2
Суммарная информация,,DMI,552,DMI системная версия,
Суммарная информация,,DMI,553,DMI системный серийный номер,
Суммарная информация,,DMI,554,DMI системный UUID,00000000-00000000-0000001A-4D561519
Суммарная информация,,DMI,555,DMI производитель системной платы,Gigabyte Technology Co.; Ltd.
Суммарная информация,,DMI,556,DMI системная плата,G33M-S2
Суммарная информация,,DMI,557,DMI версия системной платы,x.x
Суммарная информация,,DMI,558,DMI серийный номер системной платы,
Суммарная информация,,DMI,559,DMI производитель шасси,Gigabyte Technology Co.; Ltd.
Суммарная информация,,DMI,560,DMI версия шасси,
Суммарная информация,,DMI,561,DMI серийный номер шасси,
Суммарная информация,,DMI,562,DMI Asset-тег шасси,
Суммарная информация,,DMI,563,DMI тип шасси,Desktop Case
Суммарная информация,,DMI,570,DMI всего / свободных сокетов памяти,4 / 0

1. Может меняться. К номеру строки не привяжешься.
2. Суммарная информация,,Компьютер,514,Имя компьютера,
Суммарная информация,,Компьютер,513,Операционная система,
Суммарная информация,,Системная плата,517,Тип ЦП,
Суммарная информация,,Системная плата,518,Системная плата,
Суммарная информация,,Системная плата,520,Системная память,
Суммарная информация,,Отображение,523,
Суммарная информация,,Хранение данных,528,
(их может быть несколько в спойлере видно)
Суммарная информация,,Сеть,538,Первичный адрес IP,
Суммарная информация,,Сеть,534,Сетевой адаптер,
(тоже может быть несколько)

На основе примера - должна получится такая штука:
Код:
"COMPUTERNAME";"Служебное поле";"Служебное поле";"Gigabyte GA-G33M-S2";"Служебное поле";"Служебное поле";"Windows XP Professional";"DualCore Intel Pentium 1800 MHz";"2048";"Hitachi 7200 RPM SATA-II";"160";"Realtek RTL8168/8111";"Служебное поле";"192.168.20.198";"NVIDIA GeForce 8400 GS 512"
Где служебное поле это информация статическая не требующая изменений. Порядок не важен.
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
arr1val
Думаю, не финальная версия, а первый набросок, идея, так сказать...

Код:
; НАЧАЛО

 $ADDR1="1.TXT" ; Адрес файла с отчетом EVEREST

 $FILE1=FileOpen($ADDR1,0)
 $TEXT1=FileRead($FILE1)
 FileClose($FILE1)

 $ADDR2="2.TXT" ; Адрес файла со сводным отчетом

 $FILE2=FileOpen($ADDR2,2)

 Dim $A[9]=["514","513","517","518","520","523","528","538","534"]
 
 $TEXT2=""

 For $iA=0 To UBound($A)-1

  $BEGIN=1

  While True

   $B=StringInStr($TEXT1,","&$A[$iA]&",",0,1,$BEGIN)
   If $B=0 Then ExitLoop
   $B=StringInStr($TEXT1,",",0,3,$B)+1
   $E=StringInStr($TEXT1,@CR,0,1,$B)
   $S=StringMid($TEXT1,$B,$E-$B)
   $TEXT2=$TEXT2&'"'&$S&'";'
   $BEGIN=$E

  WEnd

 Next

 FileWrite($FILE2,$TEXT2)
 FileClose($FILE2)

; КОНЕЦ
 
Автор
A

arr1val

Новичок
Сообщения
16
Репутация
0
snoitaleR
Спасибо! В домашних условиях проверил - сам принцип работает. Попробую завтра прикрутить перебор по файлам и проверить "съедает" ли прога отчет, а пока появилась еще пара вопросов :smile: ПО куда будет загружаться полученный отчет восприимчиво к "полям" (наименования между точками с запятой), т.е. я сначала завожу макет импорта в программу, где указываю что первое поле это имя компа, второе ОС и т.д., вопрос: Можно ли сделать, чтобы в случае отсутствия второй сетевой или второго винта оставлялось просто пустое поле - ;""; , ну а соответственно там где есть эти поля заполнялись ?

Правильно понимаю, что данные достаются по логике "после цифры с запятой и еще одной запятой начинай брать инфу" ?
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
arr1val
Для незаполненных полей пока не могу представить алгоритм...
К примеру, жесткие диски...
Сколько пустых полей оставлять? По количеству букв в латинском алфавите?
То есть, не ясно максимальное число тех или иных одинаковых "железок"...
 
Автор
A

arr1val

Новичок
Сообщения
16
Репутация
0
snoitaleR
Два. Два под адаптеры сетевые, два под винты - больше быть не может.
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Еще набросок получения массива данных :
Код:
#include <Array.au3>
$sText=ClipGet()
$sPattern='(?:Имя компьютера|Компьютер.*Операционная система|Системная плата.*Системная плата|Тип ЦП|Системная память|Первичный адрес IP|Сетевой адаптер|Дисковый накопитель|3D-акселератор),(.+)'
$aRez=StringRegExp ( $sText, $sPattern,3) 
_ArrayDisplay($aRez)


Строку из массива уже можно получить любым способом (например : _ArrayToString и т.д.) ,дополнив служебными полями ,кавычками и т.п.
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
gregaz
В конце каждого элемента массива пустой квадратик...
Вероятно, @CR...
Можно его исключить?
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
snoitaleR [?]
Можно его исключить?
Чем ты его видишь ? я Не вижу.
Во всяком случае можно в конце пaттерна добавить : \r\n или только \r или \n
Код:
$sPattern='(?:Имя компьютера|Компьютер.*Операционная система|Системная плата.*Системная плата|Тип ЦП|Системная память|Первичный адрес IP|Сетевой адаптер|Дисковый накопитель|3D-акселератор),(.+)\r\n'
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
gregaz
После изменения патерна все Ok...


Добавлено:
Сообщение автоматически объединено:

arr1val
Модернизировал свой вариант...
Теперь можно указывать максимальное количество тех или иных одинаковых "железок"...
Если их оказывается меньше, то оставляются пустые строки "";

Код:
; НАЧАЛО

 $ADDR1="1.TXT" ; Адрес файла с отчетом EVEREST

 $FILE1=FileOpen($ADDR1,0)
 $TEXT1=FileRead($FILE1)
 FileClose($FILE1)

 $ADDR2="2.TXT" ; Адрес файла со сводным отчетом

 $FILE2=FileOpen($ADDR2,2)

 Dim $A[9][2]=[["514","1"],["513","1"],["517","1"],["518","1"],["520","1"],["523","1"],["528","2"],["538","1"],["534","2"]]
 
 $TEXT2=""

 For $iA=0 To UBound($A)-1

  $BEGIN=1

  For $jA=1 To $A[$iA][1]

   $B=StringInStr($TEXT1,","&$A[$iA][0]&",",0,1,$BEGIN)
   If $B=0 Then
    $TEXT2=$TEXT2&'"";'
    ContinueLoop
   EndIf
   $B=StringInStr($TEXT1,",",0,3,$B)+1
   $E=StringInStr($TEXT1,@CR,0,1,$B)
   $S=StringMid($TEXT1,$B,$E-$B)
   $TEXT2=$TEXT2&'"'&$S&'";'
   $BEGIN=$E

  Next

 Next

 FileWrite($FILE2,$TEXT2)
 FileClose($FILE2)

; КОНЕЦ
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
snoitaleR , Твой вариант натолкнул меня на упрощение.
Наверное так будет выглядеть попроще :
Код:
$sPattern='(?:514|513|518|517|520|538|534|528|524).+,(.+)\r\n'
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
gregaz
Да... Так компактнее... С учетом специфики отчета...
Я сейчас пытаюсь понять, как можно продолжить решение с помощью регулярных выражений, если нужно оставлять пустые строки для отсутствующих "железок"...
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
snoitaleR [?]
Я сейчас пытаюсь понять, как можно продолжить решение с помощью регулярных выражений, если нужно оставлять пустые строки для отсутствующих "железок"...
Если номер железки в отчете присутствует ,а данных нет ,то последний Паттерн выдаст пустую строку в массиве



Добавлено:
Сообщение автоматически объединено:

Виноват Чуть изменить его надо :
Код:
$sPattern='(?:514|513|518|517|520|538|534|528|524).+,(.*?)\r\n'

Поставить . *? вместо .+ (необязательность присутствия)
 
Автор
A

arr1val

Новичок
Сообщения
16
Репутация
0
gregaz
snoitaleR

Проверил все предложенные варианты, все работает! СпасибО! :IL_AutoIt_1:
Забыл сразу спросить\сказать, можно ли в конце получаемой строчки (каждой в последующем) в файле-результате дописывать два статичных параметра Maintenance и Operational, чтоб выглядело вот так:
Код:
"COMPUTERNAME";"Microsoft Windows 2000 Professional";"DualCore Intel Pentium; 1800 MHz";"Intel Eva Cove DG35EC  (1 PCI; 2 PCI-E x1; 1 PCI-E x16; 4 DDR2 DIMM; Audio; Video; Gigabit LAN; IEEE-1394)";"1013 MB";"Intel(R)  G35 Express Chipset Family  (384 MB)";"HDS728080PLA380  (80 GB; 7200 RPM; SATA-II)";"PHILIPS [email protected] FLASH DISK USB Device";"192.168.17.43";"Intel(R) 82566DC Gigabit Network Connection  (192.168.17.43)";"";"Maintenance";"Operational"
А сам пока попробую цикл прикрутить :smile:
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
arr1val [?]
можно ли в конце получаемой строчки (каждой в последующем) в файле-результате дописывать два статичных параметра Maintenance и Operational
Нет ничего проще :
Код:
#include <Array.au3>
$sText=ClipGet()
$sPattern='(?:513|514|518|517|520|538|534|528|524).+,(.*?)\r\n'
$aRez=StringRegExp ( $sText, $sPattern,3) 
_ArrayDisplay($aRez)
$sStr=_ArrayToString($aRez,'";"')
$sStr &='";"Maintenance";"Operational"'
MsgBox(0,'$sStr',$sStr)
 
Автор
A

arr1val

Новичок
Сообщения
16
Репутация
0
gregaz [?]
Если номер железки в отчете присутствует ,а данных нет ,то последний Паттерн выдаст пустую строку в массиве
В моем случае больше подходит вариант snoitaleR с возможностью точно указать максимальное количество устройств одного типа, т.к. в итоге важна одинаковость каждой строки = одинаковое количество полей.
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Кстати если нужно обрезать кое - какие концовки данных,
то это выполняется тоже просто добавлением в Паттерн в конце еще одной скобки с перечислением вырезаемых фрагментов


Добавлено:
Сообщение автоматически объединено:

arr1val [?]
с возможностью точно указать максимальное количество устройств одного типа
А зачем указывать ?
Сколько есть устройств одного типа - все выведутся в массив



Добавлено:
Сообщение автоматически объединено:

arr1val [?]
важна одинаковость каждой строки = одинаковое количество полей.
У меня одинаковость зависит только от одинаковости формы отчета (если в отчетах порядок перечисления устройств одинаков - то строки будут одинаковыми
 
Автор
A

arr1val

Новичок
Сообщения
16
Репутация
0
gregaz [?]
Кстати если нужно обрезать кое - какие концовки данных,то это выполняется тоже просто добавлением в Паттерн в конце еще одной скобки с перечислением вырезаемых фрагментов
Как указать на фрагменты если они могут от железяки к железяке меняться? Да и устраивает подробная информация :smile:


А зачем указывать ?Сколько есть устройств одного типа - все выведутся в массив
В том то и дело - такой подход не катит для дальнейшей обработки полученного отчета, который будет загружаться в програмку. А сама эта програмка воспринимает загрузку по строгому шаблону, т.е. если ей указано, что в 7-ом по счету поле инфа по видео карте - там должна быть инфа по видеокарте, если попадется комп к которому на момент сканирования еверестом было подключено 4 винта - все 4 попадут в отчет - поля сдвинутся, в поле где должна была быть инфа по видюхе (по номеру в смысле) попадет инфа про проц и будет у меня в програмке в поле Видеокарта: "Интел коре 2 дуо" :smile:

А сейчас все по красоте :

Оказался второй винт - прописали, не оказалось второго сетевого адаптера - пустота. Был третий винт еще подключен..не повезло ему попасть в отчет :smile:




Добавлено:
Сообщение автоматически объединено:

На основе примера snoitaleR родил что-то такое, отрабатывается только один файл...где я не понимаю ? :smile:

Код:
; НАЧАЛО
$everest="D:\Everest" ;откуда забираем отчеты евереста
$f_search=FileFindFirstFile($everest & '\*')
If $f_search = -1 Then Exit

While 1
    $file=FileFindNextFile($f_search)
        If @error = 1 Then ExitLoop
$file_path=$everest & "\" & $file
Wend


 $ADDR1=$file_path
Код:
$FILE1=FileOpen($ADDR1,0)
 $TEXT1=FileRead($FILE1)
 FileClose($FILE1)

 $ADDR2="D:\Наработки\Autoit\Works\Everest 2 OTRS\Export.csv" ; Адрес файла со сводным отчетом

 $FILE2=FileOpen($ADDR2,2)

 Dim $A[9][2]=[["514","1"],["513","1"],["517","1"],["518","1"],["520","1"],["523","1"],["528","2"],["538","1"],["534","2"]]
 
 $TEXT2=""
 

 For $iA=0 To UBound($A)-1

  $BEGIN=1

  For $jA=1 To $A[$iA][1]

   $B=StringInStr($TEXT1,","&$A[$iA][0]&",",0,1,$BEGIN)
   If $B=0 Then
    $TEXT2=$TEXT2&'"";'
    ContinueLoop
   EndIf
   $B=StringInStr($TEXT1,",",0,3,$B)+1
   $E=StringInStr($TEXT1,@CR,0,1,$B)
   $S=StringMid($TEXT1,$B,$E-$B)
   $TEXT2=$TEXT2&'"'&$S&'";'
   $BEGIN=$E

  Next

 Next

 FileWrite($FILE2,$TEXT2)
 FileWrite($FILE2,'"Maintenance";"Operational"'& @CRLF)
 FileClose($FILE2)

; КОНЕЦ
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
arr1val [?]
В том то и дело - такой подход не катит для дальнейшей обработки полученного отчета, который будет загружаться в програмку.
А стоит ли для тривиальной задачи использовать несколько программ ?
Вот все в одной :
Код:
$sText= FileRead('Отчет1.txt')
Dim $aNumber[10]=[9,514,518,513,517,520,528,534,538,523]
Dim $aParametrName[10]=[9,"Name : ","Model : ","Operaiting Sistem : ","CPU : ","RAM : ","Hard Dick : ","Network Adapter : ","IP Address : ","Grafic Adapter : "]
$sInfo1="Deployment State : Maintenance"
$sInfo2="Incident State : Operational"
$sStr=''
For $i=1 To UBound($aNumber)-1
	If  $i=2 Then $sStr &=$sInfo1 & @CRLF & $sInfo2 & @CRLF
	$aParametr=StringRegExp ( $sText, $aNumber[$i] & ",.+,(.*)",3)
	If IsArray($aParametr) Then 
		$sDelta = $aParametr[0] 
	Else	
		$sDelta [email protected]; Если параметр отсутствует
	EndIf	
	$sStr &=$aParametrName[$i] & $sDelta 
	If $i=6 Or $i=7 Then
		If UBound($aParametr)=2 Then 
			$sStr &=$aParametrName[$i] & $aParametr[1]
		Else
			$sStr &=$aParametrName[$i] & @CRLF; Если 2-ой экземпляр отсутствует
		EndIf
	EndIf
Next
MsgBox(0, "$sStr", $sStr)

Здесь даже учитывается возможность отсутствия в каком то из отчетов какого либо параметра.
Хотя это маловероятно для евереста , тогда можно упростить.
Здесь осталось ввести форматирование
 
Верх