|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - разобрать TXT файл на 2 по символу |
|
CMD/BAT - разобрать TXT файл на 2 по символу
|
Новый участник Сообщения: 21 |
Добрый день! Имеется текстовый файл song.txt в котором имеется песня
![]() Филипп Киркоров - Цвет настроения синий Нужно сохранить в файл artist. txt Филипп Киркоров в файл title.txt Цвет настроения синий. То есть до "пробел дефис пробел" и после. Важно разделить не просто по дефису, а по связке " - ". Потому что может быть в песне знак "-" или в имени исполнителя, например "C-Bool". Если в файле просто одно слово. Записать его в artist, title файл сделать пустым. Может быть есть элегантный вариант? Нужен именно bat! |
|
Отправлено: 15:57, 15-06-2018 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать MultiMax,
Не претендую на элегантность, прямолинейно и без извратов
@Echo Off Set "FileIn=Z:\Box_In\Artist and song.txt" Set "Sep= - " Set "FileOut1=Z:\Box_In\Artist.txt" Set "FileOut2=Z:\Box_In\Song.txt" Del "%FileOut1%" >nul 2>&1 Del "%FileOut2%" >nul 2>&1 FOR /F "usebackq delims=" %%s IN (`2^>nul More "%FileIn%"`) DO Set "S1=%%s" &Call :Separ "%%s" "%%S1:*%Sep%=%%" GoTo :Eof :Separ Set "Str=%~1" Call Set "Str=%%Str:%Sep%%~2=%%" If "%~1"=="%~2" ( >>"%FileOut1%" (Echo %~1) >>"%FileOut2%" (Echo:) ) Else ( >>"%FileOut1%" (Echo %Str%) >>"%FileOut2%" (Echo %~2) ) GoTo :Eof |
------- Последний раз редактировалось megaloman, 15-06-2018 в 19:05. Отправлено: 17:56, 15-06-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 21
|
Профиль | Отправить PM | Цитировать Вроде работает! Но скрипт обламывается при наличии в песне символа &. Прекращает обрабатывать строчку
![]() Например "G-Eazy & Halsey - Him & I" - выводится "G-Eazy" "Him" На песне "Zedd feat. Alessia Cara - Stay (Vladislav-d Remix)" не выводится название песни совсем ![]() |
Последний раз редактировалось MultiMax, 15-06-2018 в 20:28. Отправлено: 20:18, 15-06-2018 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 20:44, 15-06-2018 | #4 |
Новый участник Сообщения: 21
|
Профиль | Отправить PM | Цитировать на компьютер скачивается из интернета текстовый файл посредством батника, прямо в код батника после кода скачивания файла с фтп вставлен код выше. Это удобно. Сразу все операции в одном батнике. VBS вроде тоже подойдет? Я пробовал похожий скрипт -- аналогичная проблема, но с дефисом возникала.
|
|
Отправлено: 20:47, 15-06-2018 | #5 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата MultiMax:
|
|
Отправлено: 23:17, 15-06-2018 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата MultiMax:
|
|
Отправлено: 00:52, 16-06-2018 | #7 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать MultiMax, Учитывая содержимое Ваших файлов (наличие по тексту разных неалфавитных символов), ИМХО, Ваша задача в рамках чистого CMD не имеет решения.
Вот в одном командном файле совмещен cmd и js
@set @E=1; /*
@Echo Off
Set "FileIn=Z:\Box_In\Artist and song.txt"
Set "Sep= - "
Set "FileOut1=Z:\Box_In\Artist.txt"
Set "FileOut2=Z:\Box_In\Song.txt"
Cscript //NoLogo /E:jscript "%~dpnx0" "%FileIn%" "%Sep%" "%FileOut1%" "%FileOut2%"
GoTo :Eof
*/
var oArg = WScript.Arguments;
var FSO, inF, AllTxt, outF1, outF2, i, str12
FSO=WScript.CreateObject("Scripting.FileSystemObject");
try {inF=FSO.OpenTextFile(oArg(0),1,0)}
catch (err) {if (err != 0) {WScript.Echo(oArg(0)+" ErrorLevel=2: "+err.description);WScript.Quit(2)}}
AllTxt=inF.ReadAll().split(String.fromCharCode(13,10));
inF.Close();
outF1 = FSO.CreateTextFile(oArg(2), true, false);
outF2 = FSO.CreateTextFile(oArg(3), true, false);
for (i=0; i<AllTxt.length; i++) {
str12 = AllTxt[i].replace(oArg(1),String.fromCharCode(13,10)).split(String.fromCharCode(13,10));
outF1.WriteLine(str12[0]);
if (str12.length == 1) {outF2.WriteLine("")} else {outF2.WriteLine(str12[1])};
}
outF1.Close();
outF2.Close();
Вызов процедуры разделения файла выделен Если смириться с тем, что каждая строка в разделённых файлах будет заключена в кавычки, то, возможно, можно ограничиться чистым CMD
@Echo Off Set "FileIn=Z:\Box_In\Artist and song.txt" Set "Sep= - " Set "FileOut1=Z:\Box_In\Artist.txt" Set "FileOut2=Z:\Box_In\Song.txt" Del "%FileOut1%" >nul 2>&1 Del "%FileOut2%" >nul 2>&1 FOR /F "usebackq delims=" %%s IN (`2^>nul More "%FileIn%"`) DO Set "S1=%%s" &Call :Separ "%%S1:%Sep%=" "%%" GoTo :Eof :Separ >>"%FileOut1%" Echo %1 If Not "%~2"=="" >>"%FileOut2%" Echo %2 If "%~2"=="" >>"%FileOut2%" Echo: GoTo :Eof |
------- Последний раз редактировалось megaloman, 16-06-2018 в 10:08. Отправлено: 08:31, 16-06-2018 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Копирование названия файлов из списка по символу в отдельный файл | f1rstonlyone@vk | Скриптовые языки администрирования Windows | 2 | 07-06-2017 22:08 | |
CMD/BAT - Разбить строку на две подстроки по последнему символу \ | kokos76 | Скриптовые языки администрирования Windows | 2 | 09-01-2016 09:32 | |
CMD/BAT - [решено] Разобрать большой PDF-файл на отдельные статьи по списку страниц | Luzuk | Скриптовые языки администрирования Windows | 2 | 15-09-2013 16:42 | |
CMD/BAT - Найти txt файл по имени и заменить содержание файла на мой текст! | Fresenius | Скриптовые языки администрирования Windows | 5 | 21-11-2012 08:49 | |
CMD/BAT - [решено] Разобрать txt, на строки и назначить каждой переменную | campbell | Скриптовые языки администрирования Windows | 6 | 26-11-2011 01:32 |
|