Показать полную графическую версию : Копирование первой строки из файла
MultiMax
17-05-2011, 11:48
Помогите пожалуйста! Есть файл broad.int из него нужно скопировать в файл 1. txt первую строку. Но начать копирование только после 14ого символа в первой строке... То есть в конечном файле должно быть только "Градусы - Кто ты"
17051110425000Градусы - Кто ты
Значения первых 14ти символов постоянно меняются.. их нужно игнорировать.. реально ли реализовать это с помощью бат скрипта? Заранее спасибо!
El Sanchez
17-05-2011, 12:48
MultiMax,
@Echo Off
For /F "Tokens=*" %%A In (broad.int) Do Call :_Func "%%A"
Exit /B 0
:_Func
Set "Str=%~1"
If "%Str:~14%"=="" Exit /B
Set "Str=%Str:~14%"
Set "Str=%Str: =$%"
For /F "Tokens=1 Delims=$" %%A In ("%Str%") Do Echo.%%A>>1.txt
Foreigner
17-05-2011, 17:28
MultiMax,
@echo off
1>nul chcp 1251
setlocal
0<broad.int set /p "string="
1>1.txt echo %string:~14%
MultiMax
17-05-2011, 19:11
Спасибо! Вот только строчка длинная.. ограничить бы как-нибудь ее.. если вправо пролистать, то там пусть к файлу еще... Этот файлик нужен для вывода на радиостанции названия песни :) Вот что пишет по поводу файла разработчик:
"Во время проигрывания плей-листа в папке, где находится плей-лист, создается файл broad.int. В этом файле находится информация о проигрываемом объекте и 9-ти следующих за ним объектах.
Формат одной строчки файла:
время выхода[12]битовая маска атрибутов[2]текстовая информация[255]полный путь к файлу[255]длительность звучания[8]резервное поле2[247]0x0a
0x0a - символ конца строки
'x' - символ конца файла"
1) Можно ли как-нибудь ограничить количество символов, чтобы копировалось только название песни? В скрипте El Sanchez, удаляются кстати все символы лишние... но на второй и остальных строчках, в первой - нет :)
2) Возможно это сложно, но был бы оочень и премного благодарен и признателен, если кто-нибудь помог с тем, чтобы скрипт копировал название песни, только если она находится в каталоге E:\Music, если нет, то не обрабатывать, выдавать пустой ткст файл например.
El Sanchez
17-05-2011, 20:39
удаляются кстати все символы лишние »
MultiMax, ведь вы в шапке это и сказали
должно быть только "Градусы - Кто ты" »
но на второй и остальных строчках, в первой - нет »
MultiMax, неправда. Вот, что у меня на выходе:
Hurts - Wonderful Life
Градусы - Кто ты
Gwen, Stefani - The Sweet Escape
Simply Red - Fake
Sean, Jay - Tonight
Future Of Vision - Here Comes The Rain Again
Adriana & Vivien O’Hara - Too Late To Cry
Rickitt, Adam - Everything My Heart Desires
DJ Smash - Moscow Never Sleeps
3OH!3 feat. Kesha - My First Kiss
чтобы скрипт копировал название песни, только если она находится в каталоге E:\Music, »
MultiMax, вторую строку заменить на:
For /F "Tokens=*" %%A In ('type broad.int^|FindStr /I "E:\Music"') Do Call :_Func "%%A"
MultiMax
17-05-2011, 22:50
El Sanchez, да, действительно. Спасибо! Скрипт запускается раз в минуту и... в файле 1.txt накапливается информация... можно сделать так чтобы при "обновлении" все подчищалось, как в скрипте Foreigner? И если можно чтобы выводился не целый список, а только первая песенка, остальное пока что не нужно. Но спасибо вам огромное!!!
El Sanchez
18-05-2011, 10:31
MultiMax,
@Echo Off
Set Cnt=0
For /F "Tokens=*" %%A In ('type broad.int^|FindStr /I "E:\Music"') Do Call :_Func "%%A"
Exit /B 0
:_Func
Set "Str=%~1"
If "%Str:~14%"=="" Exit /B
If %Cnt% EQU 1 Exit /B
Set "Str=%Str:~14%"
Set "Str=%Str: =$%"
For /F "Tokens=1 Delims=$" %%A In ("%Str%") Do Echo.%%A
Set /A Cnt+=1
MultiMax
18-05-2011, 17:41
El Sanchez, спасибо! Дописал куда будет сохранять только
@Echo Off
Set Cnt=0
For /F "Tokens=*" %%A In ('type broad.int^|FindStr /I "E:\Music"') Do Call :_Func "%%A"
Exit /B 0
:_Func
Set "Str=%~1"
If "%Str:~14%"=="" Exit /B
If %Cnt% EQU 1 Exit /B
Set "Str=%Str:~14%"
Set "Str=%Str: =$%"
For /F "Tokens=1 Delims=$" %%A In ("%Str%") Do Echo.%%A>>1.txt
Set /A Cnt+=1
Файлик 1.txt не подчищается с каждым запуском скрипта... Накапливается по строчке все больше и больше
MultiMax
18-05-2011, 17:57
Сделал вот так...
@Echo Off
del F:\Broad\1.txt
end
Set Cnt=0
For /F "Tokens=*" %%A In ('type broad.int^|FindStr /I "E:\Music"') Do Call :_Func "%%A"
Exit /B 0
:_Func
Set "Str=%~1"
If "%Str:~14%"=="" Exit /B
If %Cnt% EQU 1 Exit /B
Set "Str=%Str:~14%"
Set "Str=%Str: =$%"
For /F "Tokens=1 Delims=$" %%A In ("%Str%") Do Echo.%%A>>1.txt
Set /A Cnt+=1
Но если песня из каталога НЕ music, скрипт показывает файл следующий по списку который из папки... а в эфире-то он не играет пока что :) Можно ли сделать так, чтобы в случае, если песня не из каталога music, выдавался пустой файл? И самая последняя просьба: помогите пожалуйста сделать так, чтобы весь скрипт выполнялся по кругу каждые 20 секунд, не закрывая своего окошка (Windows Scheduler каждый раз запуская скрипт открывает окно, и оно постоянно всплывает)
MultiMax
18-05-2011, 19:17
Проблема с запуском каждые 20 сек отпала! Помогите пожалуйста сделать, чтобы в случае, если песня не из каталога music, выдавался пустой файл
Foreigner
18-05-2011, 19:20
MultiMax,
Попробуйте такой вариант
@echo off
setlocal
1>nul chcp 1251
0<broad.int set /p "string="
echo %string% | 1>nul 2>&1 findstr "E:\\Music" || cd.>1.txt && goto:eof
call:set %string:~14,255%
1>1.txt echo %song%
goto:eof
:set
set "song=%*"
El Sanchez
18-05-2011, 21:40
Foreigner, супер! Изящное решение, ничего не скажешь.
MultiMax, добил свой вариант. Если ping не нужен удалить/закомментировать выделенное:
@Echo Off
0<broad.int Set /P "Str="
Set "Str=%Str:~14%"
Set "Str=%Str: =$%"
For /F "Tokens=1* Delims=$" %%A In ("%Str%") Do Echo %%B|Find /i "E:\Music" 1>nul 2>&1&&Echo.%%A>1.txt||cd.>1.txt
ping 127.0.0.1 -n 20 1>nul 2>&1&&call %0
MultiMax
19-05-2011, 00:11
Foreigner, El Sanchez СПАСИБО ВАМ ОГРОМНОЕ!!! Даже не знаю, как благодарить :) Все работает, версия с пингом вообще шикарна, все гениальное - просто, ведь недаром говорят) Извините за то что возможно отнял время! Еще раз СПА-СИ-БО!
MultiMax
19-05-2014, 22:25
снова здравствуйте! есть проблема с этим скриптом - при наличии в названии песни символа "&", скрипт не выполняется. Как поправить?
MultiMax
20-05-2014, 09:43
Помогите советом пожалуйста! Есть специальный плеер, который выплевывает файл с названием текущего трека + последующих в плейлисте. Есть скрипт bat, который парсит этот файл и выплевывает текстовый с одной строчкой - Имя Артиста - Название песни. При наличии в названии песни значка &, скрипт не выполняется. Как это обойти?
Вот сам скрипт:
@echo off
setlocal
1>nul chcp 1251
0<broad.int set /p "string="
echo %string% | 1>nul 2>&1 findstr "B" || cd.>onair.txt && goto:eof
call:set %string:~14,255%
CHCP 65001|1>onair.txt echo %song%&utf-8
goto:eof
:set
set "song=%*"
Файл, который надо парсить, приложил
MultiMax
21-05-2014, 21:22
есть кто?
MultiMax
26-05-2014, 10:18
работает, только после названия песни выплевывает в текстовый файл путь и имя файла. обрубить бы это как-нибудь и оставить только Артист - Название песни... прикрепил...
kdolzhanskiy@vk
14-07-2014, 11:30
Помогите пожалуйста с кодом. Есть логика, а навыков нет ;) Нужно из файлика Nowplay (в файле только одна строка - Исполнитель и название песни) вытаскивать в другой файл первые 8 символов плюс "2", делать перенос и повторять операцию, но уже со сдвигом на символ и так до конца строки. Результаты работы в новый файл. Это для работы RDS-кодера на радио.
То есть:
Доктор Дре - Она одна такая
Доктор Д 2
октор Др 2
ктор Дре 2
тор Дре 2
ор Дре - 2
р Дре - 2
Дре - О 2
Дре - Он 2
ре - Она 2
е - Она 2
- Она О 2
- Она Од 2 .... и.т.д.
Код однократного действия я нашел... а дальше швах!
@echo off
for /f "usebackq delims=" %%i in ("nawplay.txt") do set "first_string=%%i"& goto:#
:#
set "first_string=%first_string:~0,8% 2"
for /f "delims=^" %%i in ("%first_string: =^%") do echo %%i>"1.txt"
exit /b
В идеале еще сделать в том же файле транслитерацию... но это уже будет просто опупенно
for %%a in ("A=a" "B=b" "C=c" "D=d" "E=e" "F=f" "G=g" "H=h" "I=i"
"J=j" "K=k" "L=l" "M=m" "N=n" "O=o" "P=p" "Q=q" "R=r"
"S=s" "T=t" "U=u" "V=v" "W=w" "X=x" "Y=y" "Z=z" "А=a"
"Б=b" "В=v" "Г=g" "Д=d" "Е=e" "Ж=zh" "З=z" "И=i" "К=k"
"Л=l" "М=m" "Н=n" "О=o" "П=p" "Р=r" "С=s" "Т=t" "У=u"
"Ф=f" "Х=x" "Ц=c" "Ч=4" "Ш=sh" "Щ=ch" "Ь='" "Ы=i" "Ъ='"
"Э=e" "Ю=ju" "Я=ja") do (
call set %~1=%%%~1:%%~a%%
kdolzhanskiy@vk
23-07-2014, 13:33
Помогите пожалуйста с кодом. Есть логика, а навыков нет Нужно из файлика Nowplay (в файле только одна строка - Исполнитель и название песни) вытаскивать в другой файл первые 8 символов плюс "2", делать перенос и повторять операцию, но уже со сдвигом на символ и так до конца строки. Результаты работы в новый файл. Это для работы RDS-кодера на радио.
То есть:
Доктор Дре - Она одна такая
Доктор Д 2
октор Др 2
ктор Дре 2
тор Дре 2
ор Дре - 2
р Дре - 2
Дре - О 2
Дре - Он 2
ре - Она 2
е - Она 2
- Она О 2
- Она Од 2 .... и.т.д.
Код однократного действия я нашел... а дальше швах!
Задачу почти получилось решить выполнением кучи отдельных батников. Так 14 батников отвечают за распиливание строки на 14 кусков со сдвигом на символ и добавлением " 2". Правда чуть пришлось переделать хвостик ;) Получается 1.txt, 2.txt и т.д. до 14.txt
echo off
for /f "usebackq delims=" %%i in ("OnAir.txt") do set "first_string=%%i"& goto:#
:#
set "first_string=%first_string:~0,8%"
for /f "delims=^" %%i in ("%first_string: =^%") do <nul set /p $WRT="%%i 2" >1.txt
exit /b
Затем 15 батник собирает из получившихся текстовиков один со строчками
@echo off
(
type 1.txt
echo:
type 2.txt
echo:
type 3.txt
echo:
type 4.txt
echo:
type 5.txt
echo:
type 6.txt
echo:
type 7.txt
echo:
type 8.txt
echo:
type 9.txt
echo:
type 10.txt
echo:
type 11.txt
echo:
type 12.txt
echo:
type 13.txt
echo:
type 14.txt
)>C:\Default.txr
Все батники по очереди вызываются из одного call-ом.
Не смотря на мусорность конструкция работает. Все бы хорошо, но возникла проблема - если количества символов не хватает на создание 14 текстовиков - слить их не получается. Можно как то решить проблему со слиянием, если число файлов для него произвольное, но располагаться все должно столбиком?
На WSH:
Option Explicit
Dim strSourceFile
Dim strDestFile
Dim strLine
Dim i
strSourceFile = "C:\Песочница\047\NowPlay.txt"
strDestFile = "C:\Песочница\047\NowPlay2.txt"
With WScript.CreateObject("Scripting.FileSystemObject")
If .FileExists(strSourceFile) Then
With .OpenTextFile(strSourceFile)
strLine = .ReadLine()
.Close
End With
With .CreateTextFile(strDestFile, True)
For i = 1 To Len(strLine) - 8 + 1
.WriteLine Mid(strLine, i, 8) & " 2"
Next
.Close
End With
Else
WScript.Echo "Can't find source file [" & strSourceFile & "]."
WScript.Quit 1
End If
End With
WScript.Quit 0
По поводу транслитерации — Ваш набор неполон. Где «ё», где «й»?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.