Показать полную графическую версию : разобрать TXT файл на 2 по символу
MultiMax
15-06-2018, 15:57
Добрый день! Имеется текстовый файл song.txt в котором имеется песня :)
Филипп Киркоров - Цвет настроения синий
Нужно сохранить в файл artist. txt Филипп Киркоров
в файл title.txt Цвет настроения синий.
То есть до "пробел дефис пробел" и после. Важно разделить не просто по дефису, а по связке " - ". Потому что может быть в песне знак "-" или в имени исполнителя, например "C-Bool". Если в файле просто одно слово. Записать его в artist, title файл сделать пустым.
Может быть есть элегантный вариант? Нужен именно bat!
megaloman
15-06-2018, 17:56
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
MultiMax
15-06-2018, 20:18
Вроде работает! Но скрипт обламывается при наличии в песне символа &. Прекращает обрабатывать строчку :(
Например "G-Eazy & Halsey - Him & I" - выводится "G-Eazy" "Him"
На песне "Zedd feat. Alessia Cara - Stay (Vladislav-d Remix)" не выводится название песни совсем :(
Но скрипт обламывается при наличии в песне символа &. »
Одна из причин того, что пакетные файлы — не лучший выбор для решения данной задачи. Вы не могли бы обосновать Ваше:
Нужен именно bat! »
?
MultiMax
15-06-2018, 20:47
на компьютер скачивается из интернета текстовый файл посредством батника, прямо в код батника после кода скачивания файла с фтп вставлен код выше. Это удобно. Сразу все операции в одном батнике. VBS вроде тоже подойдет? Я пробовал похожий скрипт -- аналогичная проблема, но с дефисом возникала.
скачивается из интернета текстовый файл посредством батника »
интересно бы посмотреть, да и вообще-то сразу надо так и начинать, показывать что есть и чем надо дополнить или если советуют другой инструмент - привести полностью и детально условия (с примерами, если можно) и отказавшись от предыдущих наработок рассмотреть полностью готовый кем-то любезно предоставленный вариант на более подходящем или удобном или практически единственно возможном инструменте.
на компьютер скачивается из интернета текстовый файл посредством батника »
Покажите полный код существующего пакетного файла.
megaloman
16-06-2018, 08:31
MultiMax, Учитывая содержимое Ваших файлов (наличие по тексту разных неалфавитных символов), ИМХО, Ваша задача в рамках чистого CMD не имеет решения. @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
Но всегда можно подобрать данные, способные одурачить любую программу. В данном случае, кавычки в тексте, наверноеЛибо, еще вариант, переписать Ваш батник с закачкой полностью в vbs или js. Возможно кто-то в этом поможет.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.