Войти

Показать полную графическую версию : Извлечение строк in.txt -> out.txt в определенном порядке+форматирование текста.


ppm85
28-09-2015, 14:37
Всем привет!
Необходимо в файл out.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)



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

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




Системная плата:
Системная память[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
ppm85, а есть ли смысл огород городить на 30-дневную пробную версию?

Georgio
28-09-2015, 17:24
@<"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
ppm85, а есть ли смысл огород городить на 30-дневную пробную версию? »
У Вас есть альтернативное предложение по инвентаризации?

ppm85
29-09-2015, 06:24
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
ppm85, символ табуляции (0x09) проставляется во всех указанных Вами местах текста. Просто не везде Вы его замечаете. Таков уж этот символ, символ-хамелеон, -- может "мимикририровать" и под символ пробела:).

Iska
29-09-2015, 11:29
У Вас есть альтернативное предложение… »
Ага. WSH, PoSH.

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

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




© OSzone.net 2001-2012