Показать полную графическую версию : Добавить в начало каждой строки ее номер
papacoca
16-11-2014, 17:45
Как добавить на начало каждой строки ее номер.
Есть база синонимов в .txt файле такого типа:
вздваивание|сдвоение
вздваивать|удваивать
вздваиваю|удваиваю
Нужно переделать и сделать так:
(1, 'вздваивание|сдвоение'),
(2, 'вздваивать|удваивать'),
(3, 'вздваиваю|удваиваю'),
Нашел в интернете батник который добавляет символы в конец каждой строки, можно и в начало строки (#^%i):
for /f "delims=" %i in (1.txt) do @(echo %i^#)>>file2.txt
А вот как добывить № не нашел...
Пробуйте:
@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 ==========================================================================
Можно просто перетащить исходный файл поверх командного файла в Проводнике. Пустые строки будут пропущены.
papacoca
16-11-2014, 21:08
Iska, спасибо большое, работает как часы...
Начал уже через Linux номера строк через консоль собирать такой командой: sed '/./=' baza.txt | sed '/./N; s/\n/, /'
Вот только консоль с кириллицей не дружит и номера строк почему то неправильные:((
если нетрудно, есть формат синонимов только уже через запятую:
весьма,очень
ветвей,веток
ветви,ветки
Нужно переделать и сделать так:
(1, 'весьма|очень'),
(2, 'ветвей|веток'),
(3, 'ветви|ветки'),
Foreigner
16-11-2014, 21:33
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^),
Sphinx114
16-11-2014, 21:42
И ещё вариант:
@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 положить рядом с батником
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 ==========================================================================
papacoca
16-11-2014, 23:05
Foreigner
Работа скипта очень медленная: 7 Кб в сек.
Sphinx114
Работа моментальная.
Iska
Спасибо за испуг :) твой скрипт удалил все текстовые файлы в папке и сам батник удалился, радует хоть не на рабочем столе.
Вопрос, можно в файле в начале не с 1,2,3 нумеровать а с 668, 669, 700 и т.д.
а так:
"НАЧАЛО"
(668, 'весьма|очень'),
(669, 'ветвей|веток'),
(700, 'ветви|ветки'),
Просто мне нужно будет с разных .txt файлов лепит 1-ну базу.
Всем Огромное спасибо +1
Спасибо за испуг твой скрипт удалил все текстовые файлы в папке и сам батник удалился, радует хоть не рабочем столе. »
Пакетный файл, код которого я привёл, работает с одним (!) файлом, который указывается (!) первым (и единственным) параметром данного пакетного файла. Причём старая версия исходного файла сохраняется в том же каталоге и под тем же именем с расширением «.bak».
А уж насчёт «и сам батник удалился» я и вовсе теряюсь в догадках.
papacoca
16-11-2014, 23:54
Iska
Только что опять проверил с 1 текстовым документом и скриптом в папке все гуд!!
Вопрос, можно в файле в начале не с 1,2,3 нумеровать а с 668, 669, 700 и т.д.
так:
(668, 'весьма|очень'),
(669, 'ветвей|веток'),
(700, 'ветви|ветки'),
@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
papacoca
17-11-2014, 19:12
Georgio
Спасибо все работает
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.