Войти

Показать полную графическую версию : Чтение строки поочередно, и запись в файл


Reanosi
15-02-2018, 02:45
Здравствуйте. Форум замечательный, ответил на многие мои вопросы, но возникла задача, с которой не могу никак справится. Есть текстовый файл с данными по строкам (строк каждый раз разное количество), необходимо поочередно брать строки, и записывать их в текстовый файл, при каждом запуске батника, по завершению копирования последней строчки, начать с первой, зациклить. Т.е при каждом запуске батника необходима одна строка из первого списка. Нашел на форуме код счетчика, но подправить его под свои нужды увы, не смог.

alpap
15-02-2018, 12:04
Не очень-то понял задачу
Например такой код будет брать из "file.txt" одну строку по нарастанию при каждом запуске bat и записывать ее в "OUT.txt". Будет создаваться вспомогательный файл "$", его не удалять до конца цикла действий, а вот перед новым циклом, напротив - удалить (можно его создавать и не на виду)

@echo off
set "f=file.txt"
set "f_out=OUT.txt"

(if exist $ <$ set /p n=)& set /a n+=1&>$ cmd /v/c echo:!n!
<"%f%">>"%f_out%" (for /f "tokens=2 delims=[]" %%a in ('find /n /v ""^|find "[%n%]"') do @echo:%%a)
pause>nul


зацикливание не делал так как пока не понимаю задачи

Вот с зацикливанием:

@echo off
set "f=file.txt"
set "f_out=OUT.txt"

(if exist $ <$ set /p n=)& set /a n+=1&>$ cmd /v/c echo:!n!
<"%f%" (for /f "delims=" %%a in ('find /c /v ""') do @set "smax=%%a")
<"%f%">>"%f_out%" (for /f "tokens=2 delims=[]" %%a in ('find /n /v ""^|find "[%n%]"') do @echo:%%a)
if %n%==%smax% del $
pause>nul

Reanosi
15-02-2018, 14:39
Огромное спасибо, но есть одно но. В OUT.txt добавляются строки, а мне нужно чтобы он заменял первую строку новой. (в OUT.txt должна быть всегда только одна строка)

megaloman
15-02-2018, 14:40
@Echo Off
cls

Set "FileIn=Z:\Box_In\File.txt"
Set "FileOut=Z:\Box_In\FileString.txt

Call :WriteCount "%FileIn%" "%FileOut%" "%~nx0"

more "%FileOut%"
Pause
GoTo :Eof

:WriteCount
Set "Counter=%~dp2%~nx1.%~3.log"
If Not Exist "%Counter%" (
>"%Counter%" (Echo 1)
FOR /F "usebackq delims=" %%s IN (%1) DO (>"%FileOut%" (Echo %%s) &Exit /B 0)
Exit /B 2
)
3<"%Counter%" (Set /P N=<&3)
Set /A NN=%N%+1
FOR /F "usebackq skip=%N% delims=" %%s IN (%1) DO (>"%Counter%" (Echo %NN%) &>"%FileOut%" (Echo %%s) &Exit /B 0)
Del "%Counter%"
GoTo :WriteCount
GoTo :Eof
В исходном файле не должно быть пустых строк

Reanosi
15-02-2018, 14:48
Супер. Огромное спасибо.




© OSzone.net 2001-2012