Войти

Показать полную графическую версию : [решено] Последнее значение в строке


ncmps
29-06-2015, 13:18
Добрый день! прошу о помощи. Долго искал, но так и не нашёл подходящего решения для задачи.
Есть текстовый файл в который скидываются данные в одну строку в виде:

---------- TESTLOG.TXT/23.06.2015-username-18:15:18,31-unblocked//23.06.2015-username-20:53:08,33-unblocked//23.06.2015-username-20:53:08,43-unblocked/ /23.06.2015-username-20:53:08,77-unblocked/ /23.06.2015-username-20:53:08,93-unblocked//23.06.2015-username-20:53:15,52-unblocked//23.06.2015-username-20:53:16,83-unblocked//23.06.2015-username-21:04:48,97-unblocked/

Необходимо из этой строки забирать первое и последнее значения между разделителями "/"
С первым значением всё просто: for /f "tokens=2 delims=/" %%a in (temp.txt) do echo %%a>>username.txt"
А вот как выдирать последнее значение из строки так и не могу понять. Т.е. в данном примере последним значением должно быть записано: 23.06.2015-username-21:04:48,97-unblocked
При этом все значения могут меняться и быть разными, за исключением username. Соответственно и кол-во значений до последнего тоже постоянно будет разным.

Foreigner
29-06-2015, 13:41
@echo off
setlocal

<temp.txt set /p "text="

for %%i in (%text:/=" %) do set "res=%%~i"

echo %res: =%

ncmps
29-06-2015, 14:04
Спасибо. А можно хотя бы краткий комментарий по каждой из строк? )

ncmps
29-06-2015, 17:40
Не работает в общем скрипте :\

@echo off

set temp=temp.txt

set log=log.txt

set user1=name1

set user2=name2

set user3=name3

set user4=name4

set user5=name5

::user1

for /f "delims=" %%i in ('find "/%date%-%user1%-" %log%') do <nul Set /p $V=%%i>>"%temp%"

for /f "tokens=2 delims=/" %%a in (%temp%) do echo %%a >> %user1%.txt"

setlocal

<temp.txt set /p "text="

for %%i in (%text:/=" %) do set "res=%%~i"

echo %res: =% >> %user1%.txt"

endlocal

if exist "%temp%" del "%temp%" /f /q

::user2

for /f "delims=" %%i in ('find "/%date%-%user2%-" %log%') do <nul Set /p $V=%%i>>"%temp%"

for /f "tokens=2 delims=/" %%a in (%temp%) do echo %%a>>%user2%.txt"

setlocal

<temp.txt set /p "text="

for %%i in (%text:/=" %) do set "res=%%~i"

echo %res: =% >> %user2%.txt"

endlocal

if exist "%temp%" del "%temp%" /f /q

::user3

и т.д.

Что я упускаю? (

Georgio
29-06-2015, 19:52
Не работает в общем скрипте ».




А Вы уверены, что в лог-файле присутствует текущая дата ("%date%"), которую Вы ищете? Если уверены, то попробуйте такой "общий скрипт":


@echo off

set "log=log.txt"

set "$user1=name1"
set "$user2=name2"
set "$user3=name3"
set "$user4=name4"
set "$user5=name5"
:: и. т. д.

for /f %%i in ('set $user^| find/c /v ""') do (
for /l %%j in (1 1 %%i) do (
for /f "delims=/" %%k in ('^<"%log%" cmd/v/c find "/%date%-!$user%%j!-"') do (
set/a n+=1
cmd/v/c echo !n!| >nul findstr/x 1&& cmd/v/c ">"!$user%%j!.txt" echo %%k"|| set x=%%k
)
if defined x cmd/v/c ">>"!$user%%j!.txt" echo !x!"
set x=& set n=
)
)

exit/b


.

ncmps
30-06-2015, 12:06
А Вы уверены, что в лог-файле присутствует текущая дата ("%date%"), которую Вы ищете? Если уверены, то попробуйте такой "общий скрипт": »
Да, в общий лог ежедневно сыплется куча событий из которых мне собственно и надо выдирать первое и последнее на текущую дату по username.

Спасибо, буду пытаться разобраться.




© OSzone.net 2001-2012