Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Добавить в начало каждой строки ее номер

Ответить
Настройки темы
CMD/BAT - Добавить в начало каждой строки ее номер

Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Как добавить на начало каждой строки ее номер.

Есть база синонимов в .txt файле такого типа:
вздваивание|сдвоение
вздваивать|удваивать
вздваиваю|удваиваю

Нужно переделать и сделать так:
(1, 'вздваивание|сдвоение'),
(2, 'вздваивать|удваивать'),
(3, 'вздваиваю|удваиваю'),

Нашел в интернете батник который добавляет символы в конец каждой строки, можно и в начало строки (#^%i):
Код: Выделить весь код
for /f "delims=" %i in (1.txt) do @(echo %i^#)>>file2.txt
А вот как добывить № не нашел...

Отправлено: 17:45, 16-11-2014

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Пробуйте:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=%~1

call :GetTemporaryName

if defined sSourceFile (
	if exist "%sSourceFile%" (
		set /a iCount = 0
		
		>"%TemporaryName%" (
			for /f "usebackq delims=" %%i in ("%sSourceFile%") do (
				set /a iCount += 1
				echo ^(!iCount!, '%%i'^),
			)
		)
		
		>nul copy /y "%sSourceFile%" "%~dpn1.bak"
		>nul copy /y "%TemporaryName%" "%sSourceFile%"
		del /f /q "%TemporaryName%"
	) else (
		echo Can't find source file [%sSourceFile%].
		exit /b 2
	)
) else (
	echo Usage: %~nx0 ^<Source file^>
	exit /b 1
)


endlocal
exit /b 0

rem ==========================================================================
rem Функция GetTemporaryName()
rem
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
	setlocal enableextensions enabledelayedexpansion

:NextName
	set sTempName=%temp%\temp%random%.tmp

	if exist "%sTempName%" goto :NextName

	set sProcName=%~0

	endlocal & set %sProcName:~4%=%sTempName%
	exit /b 0
rem ==========================================================================

Можно просто перетащить исходный файл поверх командного файла в Проводнике. Пустые строки будут пропущены.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:23, 16-11-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, спасибо большое, работает как часы...
Начал уже через Linux номера строк через консоль собирать такой командой: sed '/./=' baza.txt | sed '/./N; s/\n/, /'
Вот только консоль с кириллицей не дружит и номера строк почему то неправильные(

если нетрудно, есть формат синонимов только уже через запятую:
весьма,очень
ветвей,веток
ветви,ветки

Нужно переделать и сделать так:
(1, 'весьма|очень'),
(2, 'ветвей|веток'),
(3, 'ветви|ветки'),

Последний раз редактировалось papacoca, 16-11-2014 в 21:14. Причина: Ошибка


Отправлено: 21:08, 16-11-2014 | #3


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


papacoca, Попробуй так:
Код: Выделить весь код
@echo off
setlocal
1>nul chcp 1251

for /f "tokens=1,2 delims=," %%i in (1.txt) do call:1 %%i %%j
move 1.tmp 1.txt
1>nul chcp 866
goto:eof

:1
set /a n+=1
1>>1.tmp echo ^(%n%,%1^|%2^),
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:33, 16-11-2014 | #4


Старожил


Сообщения: 459
Благодарности: 138

Профиль | Отправить PM | Цитировать


И ещё вариант:
Код: Выделить весь код
@echo off 1>&3 3>2.txt
setlocal enabledelayedexpansion
for /f "delims=" %%i in (1.txt) do (
set /a n+=1
set "str=%%i"
echo ^(!n!, '!str:,=^|!'^),
)
1.txt положить рядом с батником
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:42, 16-11-2014 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Foreigner, жив курилка! Какими судьбами?! «Я, конечно, вернусь, не пройдёт и полгода…» (с)

papacoca, пробуйте, мой вариант:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=%~1

call :GetTemporaryName

if defined sSourceFile (
	if exist "%sSourceFile%" (
		set /a iCount = 0
		
		>"%TemporaryName%" (
			for /f "usebackq delims=" %%i in ("%sSourceFile%") do (
				set /a iCount += 1
				set sLine=%%i
				echo ^(!iCount!, '!sLine:,=^|!'^),
			)
		)
		
		>nul copy /y "%sSourceFile%" "%~dpn1.bak"
		>nul copy /y "%TemporaryName%" "%sSourceFile%"
		del /f /q "%TemporaryName%"
	) else (
		echo Can't find source file [%sSourceFile%].
		exit /b 2
	)
) else (
	echo Usage: %~nx0 ^<Source file^>
	exit /b 1
)


endlocal
exit /b 0

rem ==========================================================================
rem Функция GetTemporaryName()
rem
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
	setlocal enableextensions enabledelayedexpansion

:NextName
	set sTempName=%temp%\temp%random%.tmp

	if exist "%sTempName%" goto :NextName

	set sProcName=%~0

	endlocal & set %sProcName:~4%=%sTempName%
	exit /b 0
rem ==========================================================================
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:49, 16-11-2014 | #6


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
Foreigner
Работа скипта очень медленная: 7 Кб в сек.
Цитата:
Sphinx114
Работа моментальная.
Цитата:
Iska
Спасибо за испуг твой скрипт удалил все текстовые файлы в папке и сам батник удалился, радует хоть не на рабочем столе.

Вопрос, можно в файле в начале не с 1,2,3 нумеровать а с 668, 669, 700 и т.д.
а так:
"НАЧАЛО"
(668, 'весьма|очень'),
(669, 'ветвей|веток'),
(700, 'ветви|ветки'),

Просто мне нужно будет с разных .txt файлов лепит 1-ну базу.

Всем Огромное спасибо +1

Последний раз редактировалось papacoca, 16-11-2014 в 23:41.


Отправлено: 23:05, 16-11-2014 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата papacoca:
Спасибо за испуг твой скрипт удалил все текстовые файлы в папке и сам батник удалился, радует хоть не рабочем столе. »
Пакетный файл, код которого я привёл, работает с одним (!) файлом, который указывается (!) первым (и единственным) параметром данного пакетного файла. Причём старая версия исходного файла сохраняется в том же каталоге и под тем же именем с расширением «.bak».

А уж насчёт «и сам батник удалился» я и вовсе теряюсь в догадках.

Отправлено: 23:46, 16-11-2014 | #8


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
Iska
Только что опять проверил с 1 текстовым документом и скриптом в папке все гуд!!

Вопрос, можно в файле в начале не с 1,2,3 нумеровать а с 668, 669, 700 и т.д.
так:

(668, 'весьма|очень'),
(669, 'ветвей|веток'),
(700, 'ветви|ветки'),

Отправлено: 23:54, 16-11-2014 | #9


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@echo off

set "in=1.txt"
set "out=2.txt"
set start=668

set /a n=start-1
@>"%out%" 2>nul (
for /f "usebackq tokens=1* delims=," %%i in ("%in%") do @(
 set /a n+=1
 <nul call set /p=(%%n%%
 echo , '%%i^|%%j'^),
 )
)|| (echo The file not found or is empty.& pause>nul& exit /b 1)

exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:15, 17-11-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Добавить в начало каждой строки ее номер

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
MySQL - Дописать в начало строки текст каждой записи в опредленном поле Artem-Samsung Программирование и базы данных 7 02-10-2019 20:22
CMD/BAT - [решено] For, чтение двух переменных с каждой строки DesmondTruman Скриптовые языки администрирования Windows 4 21-12-2012 03:12
PowerShell - [решено] цикл для каждой строки из файла rudimko Скриптовые языки администрирования Windows 15 25-10-2012 09:46
Разное - Добавление имени файла в начало каждой строки. CkapHa Программирование и базы данных 2 02-01-2012 22:13
.NET - [решено] Определить и записать смещение каждой строки S.T.R.E.L.O.K. Программирование и базы данных 5 15-08-2011 09:55




 
Переход