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

mxm199 03-07-2012 13:57 1944938

Правка текстового файла
 
Доброго всем времени суток, подскажите пожалуйста - имеется текстовый файл, много-много строк, примерно такой -
---
текст текст текст 1111111111;
текст2 текст2 текст2 2222222222;
...
---
вопрос - каким образом можно добавить в начало каждой строки одно и тоже слово, а последнее слово в каждой строке (номер) немного видоизменить ?
т.е. на выходе хотелось видеть -
---
СЛОВО текст текст текст ФАЙЛ 1111111111
СЛОВО текст2 текст2 текст2 ФАЙЛ 2222222222
...
---

вообще мне это нужно, что бы получить батник spisok.cmd такого вида
---
@echo текст текст текст > c:\spisok\1111111111
@echo текст2 текст2 текст2 > c:\spisok\2222222222
---
ну и естественно, после запуска этого батника получаю много-много файлов, содержащих каждый свой текст.

Заранее спасибо.

mxm199 03-07-2012 15:17 1945009

не, текст везде по длине и блокам у всех совершенно разный (

mxm199 04-07-2012 10:26 1945531

текст и с пробелами и с точками, точкой запятой, полный набор символов )

Anonymоus 04-07-2012 10:53 1945548

А зачем, собственно, использовать один батник для генерации другого, если всё можно сделать в одном?

Код:

@Echo Off
SetLocal EnableDelayedExpansion

rem Разбираем исходный файл построчно
For /F "usebackq delims=" %%L In ("test.txt") Do (
        Set Text=%%L
        rem Выделяем последний сегмент строки
        For %%A In (%%L) Do (Set LastWord=%%A)
        rem Костыль с for из-за невозможности замены с двумя !переменными!
        For /F "delims=" %%S In ("!LastWord!") Do (
                rem Убираем последний сегмент
                Set Text=!Text:%%S=!
                rem И откусываем последние два символа - точку с запятой и
                rem разделитель-пробел
                Set Text=!Text:~,-2!
        )
        rem Пишем строку в файл, имя которого берется из последнего сегмента её же
        Echo !Text!>"C:\spisok\!LastWord!.txt"
)
Pause

На приведенном вами примере
Цитата:

Цитата mxm199
текст текст текст 1111111111;
текст2 текст2 текст2 2222222222; »

работает. Как на реальных данных будет - зависит от них, я бы предпочел увидеть именно их. Из возможных узких мест:
* Длина строки не должна выходить за пределы максимальной длины переменной у командного интерпретатора windows
* Восклицательные знаки из текста будут убраны из-за EnableDelayedExpansion
* Имя конечного файла должно быть без пробелов, иначе один из циклов For воспримет его, как разделитель. Или, если пробелы нужны - заключено в двойные кавычки.

mxm199 04-07-2012 11:30 1945573

ПРОСТО ШИКАРНО!!! Очень благодарен, огромное СПАСИБО )))
Не хочется наглеть ))) а возможно сделать, чтобы готовые разбитые файлы были в кодировке UTF8 без BOM ???

Anonymоus 04-07-2012 11:34 1945575

mxm199, а исходные файлы в UTF-8 без BOM? Если да, то просто сохраните батник в такой же кодировке.
Если нет - можно с легкостью на лету сменять кодировку строки с помощью recode из пакета GNU coreutils

mxm199 04-07-2012 11:57 1945588

исходный просто в АНСИ, это я понял, что зависит от исходника, при смене на УТФ исходника и готовые получаются в УТФ, ну это я так уже спросил )

....как тут плюс поставить...?

Anonymоus 04-07-2012 12:12 1945595

Вот ещё на всякий случай, если вам придется работать с не-ANSI входным файлом:
Код:

        Echo !Text!>"C:\spisok\!LastWord!.txt"
заменяется на
Код:

        Echo !Text!|recode cp1251..utf8>"С:\spisok\!LastWord!.txt"
где cp1251 меняется на кодировку файла со входными данными. А саму утилиту recode можно взять отсюда
Цитата:

Цитата mxm199
....как тут плюс поставить...? »

Снизу каждого поста есть ссылка "полезное сообщение".

mxm199 04-07-2012 14:56 1945696

Всё просто супер )

рекоде должна соответственно вместе с батником лежать?

Anonymоus 04-07-2012 14:58 1945699

Да, или рядом с батником, или в любой директории, прописанной в %Path%.


Время: 20:44.

Время: 20:44.
© OSzone.net 2001-