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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Извлечение строк in.txt -> out.txt в определенном порядке+форматирование текста. (http://forum.oszone.net/showthread.php?t=305972)

ppm85 28-09-2015 14:37 2558538

Извлечение строк in.txt -> out.txt в определенном порядке+форматирование текста.
 
Всем привет!
Необходимо в файл out.txt извлечь из файла in.txt строки(с определенными словами) в нужном порядке и убрать лишние пробелы перед словами и между ними поставить знак табуляции.

Пример:
in.txt

Код:

--------[ Суммарная информация ]----------------------------------------------------------------------------------------

    Компьютер:
      Тип компьютера                                    ACPI компьютер на базе x64  (Mobile)
      Операционная система                              Microsoft Windows 8.1 Professional
      Пакет обновления ОС                              -
      Internet Explorer                                11.0.9600.16384 (IE 11.0)
      DirectX                                          DirectX 11.2
      Имя компьютера                                    PP
      Имя пользователя                                  1
      Вход в домен                                      PP
      Дата / Время                                      2015-09-28 / 10:04

  Системная плата:
      Тип ЦП                                            Mobile DualCore Intel Core i5-3337U, 2700 MHz (27 x 100)
      Системная плата                                  Hewlett-Packard HP ENVY Sleekbook 6

      Чипсет системной платы                            Intel Panther Point HM77, Intel Ivy Bridge
      Системная память                                  8096 МБ  (DDR3-1600 DDR3 SDRAM)
      DIMM1: Micron 8KTF51264HZ-1G6E1                  4 ГБ DDR3-1600 DDR3 SDRAM  (11-11-11-28 @ 800 МГц)  (10-10-10-27 @ 761 МГц)  (9-9-9-24 @ 685 МГц)  (8-8-8-22 @ 609 МГц)  (7-7-7-19 @ 533 МГц)  (6-6-6-16 @ 457 МГц)  (5-5-5-14 @ 380 МГц)
      DIMM3: Micron 8KTF51264HZ-1G6E1                  4 ГБ DDR3-1600 DDR3 SDRAM  (11-11-11-28 @ 800 МГц)  (10-10-10-27 @ 761 МГц)  (9-9-9-24 @ 685 МГц)  (8-8-8-22 @ 609 МГц)  (7-7-7-19 @ 533 МГц)  (6-6-6-16 @ 457 МГц)  (5-5-5-14 @ 380 МГц)
      Тип BIOS                                          Insyde (05/16/2014)



Необходимо извлечь строки(имеющие данные слова) в определенном порядке, убрать пробелы перед началом этих строк и поставить знаки табуляции между столбцами:
Код:

Системная плата:
Системная память
Тип ЦП
Системная плата

out.txt

Код:

Системная плата:
Системная память[TAB]8096 МБ  (DDR3-1600 DDR3 SDRAM)
Тип ЦП[TAB]Mobile DualCore Intel Core i5-3337U, 2700 MHz (27 x 100)
Системная плата[TAB]Hewlett-Packard HP ENVY Sleekbook 6



Как извлекать строки с определенным текстом вроде разобрался:
Код:

findstr.exe /i /g:words.txt in.txt >out.txt
,где words - список искомых слов в строках. Только так не сортируются строки в том порядке, в котором перечислены искомые слова в words.txt

p.s. Нужно генерировать отчеты из Aida64 с определенными полями, убирая лишние, чего сама Aida64 не позволяет делать ввиду ограниченного функционала. Затем всё это добро закидывается в Excel, где разбивается на столбцы благодаря знакам табуляции.

Iska 28-09-2015 15:34 2558569

ppm85, а есть ли смысл огород городить на 30-дневную пробную версию?

Georgio 28-09-2015 17:24 2558598

Код:

@<"in.txt">"out.txt" (for /f "tokens=1,2*" %%i in (
 'for %%i in ("Системная плата:" "Системная память" "Тип ЦП" "Системная плата "^) do @find/i %%i'
) do @if "%%k" equ "" (echo %%i %%j) else (echo %%i %%j        %%k))


ppm85 29-09-2015 06:05 2558731

Цитата:

Цитата Iska
ppm85, а есть ли смысл огород городить на 30-дневную пробную версию? »

У Вас есть альтернативное предложение по инвентаризации?

ppm85 29-09-2015 06:24 2558733

Georgio, да, скрипт отрабатывает, только не везде знаки табуляции ставит:
Код:

Системная плата:
Системная память        8096 МБ  (DDR3-1600 DDR3 SDRAM)
Тип ЦП        Mobile DualCore Intel Core i5-3337U, 2700 MHz (27 x 100)
Системная плата        Hewlett-Packard HP ENVY Sleekbook 6


Georgio 29-09-2015 07:00 2558739

ppm85, символ табуляции (0x09) проставляется во всех указанных Вами местах текста. Просто не везде Вы его замечаете. Таков уж этот символ, символ-хамелеон, -- может "мимикририровать" и под символ пробела:).

Iska 29-09-2015 11:29 2558842

Цитата:

Цитата ppm85
У Вас есть альтернативное предложение… »

Ага. WSH, PoSH.

Цитата:

Цитата ppm85
…по инвентаризации? »

Вот я и говорю про то — довольно-таки странно основывать инвентаризацию на 30-дневной пробной версии.


Цитата:

Цитата ppm85
только не везде знаки табуляции ставит: »

Потому лучше выкладывать не содержимое текстового файла, а сам текстовый файл, предварительно упаковав его в архив.


Время: 21:43.

Время: 21:43.
© OSzone.net 2001-