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 в 10: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 в 14:53. |
|
![]() |