| imho.ws |
![]() |
|
|
|
# 1 |
|
Full Member
Регистрация: 11.12.2002
Сообщения: 864
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Маленькая прога для автонумерации
Срочно требуется маленькая програмка/скриптик для перенумерации строк в текстовом файле по винду. Желательно досовский батчик или ВБ-скриптик.
Должна делать следующее: Читать входной текстовой файл и перенумеровывать по порядку все незакомментированные строчки. Пустых строк нет. Пример входного файла: Код:
# Коммент 1 Строка 1 3 Строка 2 # еще коммент 5 Еще одна строка Код:
# Коммент 1 Строка 1 2 Строка 2 # еще коммент 3 Еще одна строка |
|
|
|
|
# 2 |
|
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Файл myren.cmd:
Код:
@echo off
if "%1"=="" exit
if not exist %1 exit
set tmp_file=%TEMP%\myren.tmp
if exist !tmp_file! del /f /q !tmp_file!
set num=0
for /f "tokens=1* delims= " %%i in (%1) do (
if not %%i==# (
set /a num+=1
echo !num! %%j>>!tmp_file!
) else (
echo %%i %%j>>!tmp_file!
)
)
type !tmp_file!>%1
del /f /q !tmp_file!
Код:
@cmd /v:on /c myren.cmd readme.txt
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! |
|
|
|
|
# 3 | ||
|
Junior Member
Регистрация: 11.10.2005
Сообщения: 63
![]() |
Не совсем правильно отрабатывает, т.к. заменяет первое слово на порядкой номер строки и из
Цитата:
Цитата:
|
||
|
|
|
|
# 4 |
|
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
_Lynx_
В задаче сказано перенумеровать, т.е. изменить номер. Другими словами, строка всегда начинается либо с символа комментария, либо с номера, отделенных от остальной части строки пробелом. В твоем примере это не так - строка не содержит номера. В таком случае задача не может быть решена, поскольку никакая программа не сможет определить, является ли часть строки до первого пробела номером или значащим словом предложения - ведь таким словом может быть и число! Получается нечто из области искусственного интеллекта... Единственное, что можно сделать, это вставить проверку, что часть строки до первого пробела является числом - реализовать это достаточно сложно, но, думаю, можно.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! |
|
|
|
|
# 5 | |
|
Junior Member
Регистрация: 11.10.2005
Сообщения: 63
![]() |
Так наверное будет правильнее
Цитата:
ну да ладно, главное работает |
|
|
|
|
|
# 6 |
|
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Твои изменения в батнике не приведут к желаемому результату, поскольку условие
Код:
if %%i GEQ 0 ( if %%i LEQ 9 ( Мои слова подтверждает простенький пример:Код:
@echo off set a=12 if %a% GEQ 0 ( if %a% LEQ 9 ( echo %a% ) ) Лучше проверку сделать вот тоак: Код:
@echo off set a=12 set /a b=(a+1)-1 if %a%==%b% echo %a%
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! Последний раз редактировалось Ghost; 11.01.2006 в 11:46. Причина: склероZzz... |
|
|
|
|
# 8 | |
|
Full Member
Регистрация: 11.12.2002
Сообщения: 864
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Строк в файлe действително больше 100. А то бы я ручками все делал. Первое поле- можно стирать, там всегда будет цифра. Гораздо менее приятной неожиданностью оказалось что некоторые пишут комменты не отделяя от # - типа
Цитата:
Код:
for /f "tokens=1* delims= " %%i in (%1) do (
set fst=%%i
if not "!fst:~0,1!"=="#" (
set /a num+=1
echo !num! %%j>>!tmp_file!
) else (
echo %%i %%j>>!tmp_file!
)
)
кстати, комманда Код:
setlocal ENABLEDELAYEDEXPANSION Последний раз редактировалось crawler; 11.01.2006 в 15:53. |
|
|
|