Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удалить в текстовом файле все строки кроме одной нужной.

Ответить
Настройки темы
CMD/BAT - [решено] Удалить в текстовом файле все строки кроме одной нужной.

Старожил


Сообщения: 286
Благодарности: 10

Профиль | Отправить PM | Цитировать


Изменения
Автор: 9119
Дата: 16-12-2020
Вложения
Тип файла: zip source.zip
(67.4 Kb, 7 просмотров)
Добрый.

Есть однотипные файлы txt. В них строка №2. Очень длинная. Явно превышающая стандартное ограничение.
find и findstr пишут "длинная строка"
txt во вложении.

Начинается нужная строка всегда с "audioContent".


Нужно:

1) скопировать строку №2 из source.txt в out.txt.

или

в source.txt удалить ВСЕ строки кроме №2.

В идеале, нужно решение без привязки к искомым словам, а просто к номеру строк.


2) В результирующем txt удалить пробелы, слово "audioContent" и (")двойные кавычки(")

Отправлено: 16:11, 16-12-2020

 

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1218
Благодарности: 509

Профиль | Отправить PM | Цитировать


Цитата Iska:
Поясните примером. »
типа:
Код: Выделить весь код
...
$json.input.text = if ($a = get-clipboard){$a}else{read-host "Пожалуйста, введите или вставьте из буфера текст"}
...

-------
scio me nihil scire. Ѫ


Отправлено: 21:38, 17-12-2020 | #31



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


YuS_2, спасибо, ясно. В этом случае мы не видим промежуточный текст.

Отправлено: 22:55, 17-12-2020 | #32


Старожил


Сообщения: 286
Благодарности: 10

Профиль | Отправить PM | Цитировать


Спасибо всем кто отозвался!
Впринципе результат удовлетворительный и тему можно помечать как решенную, но все же попрошу помощи в оптимизации "написанного").
А именно: (опишу процесс, чтобы было более понятно)

Все делается в PS (GUI для работы с google text-to-speech):
1) через окно пишем нужные параметры в text.json для последующего запроса на сервак.
2) Шлем запрос на сервак, ответ сервака пишем в source.txt
здесь таймаут (ждем пока пишется ответ с сервака)
3) Корректируем source.txt как надо и пишем результат в out.txt
здесь таймаут (ждем обработки п.3)
4) Еще корректируем нюансы и пишем полученное в out1.txt
здесь таймаут (ждем отработки п.4)
5) Перекодируем out1.txt в конечный файл mp3.

Нужно как-то убрать таймауты... А вот как- ума не приложу.
Поясню - тестил на небольших статьях на 2 минуты, поставил после п2 таймаут в 10 сек, работает корректно. Но если этот текст будет минут на 15-20, то уже 10сек таймаута будет мало..п.3 начнется раньше, чем будет записан source.txt.... и будет ошибка на выходе.
Надеюсь понятно объяснил...(

p.s. крутится идея как-то привзязаться к наличию и размеру txt файлов (например, если source.txt создан и размер его больше чем 0 байт - тогда переходим к следующему шагу, ну или как-то так).
Нужен универсальный вариант, без подбора таймаутов вручную, чтобы работало с любой длинной текста.


сам скрипт
echo off | Out-Null
$p='E:\11\bin'
$s='E:\11'
echo ""
echo ""
echo ("=================================================Google Text-To=Speech=================================================")
echo ""
timeout /t 2 | Out-Null
echo ("1) Скачиваем файл...")
echo ""
start $p/hidec.exe download.bat
timeout /t 10 | Out-Null


echo ("2) Выделяем код...")
echo ""
findstr /I "audioContent" $p\source.txt > $p\out.txt
del $p\source.txt
timeout /t 2 | Out-Null


echo ("3) Обработываем полученный код...")
echo ""
start $p/hidec.exe text_mod.bat
timeout /t 5 | Out-Null


echo ("4) Конвертируем в mp3...")
echo ""
echo ""
& $p\b64.exe -d out1.txt $s\audio\sound.mp3
del $p\out1.txt

echo ("=========================================================Готово!================================== ====================")
timeout /t 2 | Out-Null
explorer $s\audio
exit

Последний раз редактировалось 9119, 18-12-2020 в 10:39.


Отправлено: 02:45, 18-12-2020 | #33


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Цитата 9119:
google text-to-speech »
А он лучше, чем штатный голосовой движок? Например переводим текст в wav:
Код: Выделить весь код
using namespace System.Speech
using namespace System.Speech.Synthesis

param (
    [Parameter (Mandatory = $false, ValueFromPipeline = $true)]
    [string]
    $text = $(Get-Clipboard | Out-String),

<# Надо подключать дополнительные "голоса", через реестр, например Павла.

    [Parameter(Mandatory = $false)]
    [VoiceGender]
    $sex = 'female',

#>

    [Parameter(Mandatory = $false)]
    [string]
    $culture = 'ru-RU'
)

if ($PSEdition -eq 'Core')
    { Write-Warning 'Not Working on PowerShell 7'; return }


$speaker = [SpeechSynthesizer]::new()

if ($culture -eq 'en-US')
{
    $speaker.SelectVoice('Microsoft Zira Desktop')
    $speaker.Rate = -1
}

else
{
    $speaker.SelectVoice('Microsoft Irina Desktop')
    $speaker.Rate = 1
}

$speaker.SetOutputToWaveFile("$HOME\Desktop\out.wav")
$speaker.Speak($text)

Start-Sleep -Milliseconds 1500

$speaker.Dispose()

Последний раз редактировалось Foreigner, 18-12-2020 в 04:47.


Отправлено: 04:37, 18-12-2020 | #34


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1218
Благодарности: 509

Профиль | Отправить PM | Цитировать


Цитата Iska:
В этом случае мы не видим промежуточный текст. »
Если очень надо, то можно выводить в консоль буфер:
Код: Выделить весь код
...{$a;write-host $a} else {...

-------
scio me nihil scire. Ѫ


Отправлено: 07:51, 18-12-2020 | #35


Старожил


Сообщения: 286
Благодарности: 10

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
А он лучше, чем штатный голосовой движок »
да, значительно.
Просто сам додумать не могу как избавится от таймаутов...

Последний раз редактировалось 9119, 18-12-2020 в 10:46.


Отправлено: 09:49, 18-12-2020 | #36


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Если очень надо, то можно выводить в консоль буфер: »
[Произносится медленно, нараспев:] А поправить ? В смысле — ежели надо не только вывести, но и оперативно поправить содержимое и зараз же продолжить?

Отправлено: 14:43, 18-12-2020 | #37


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1218
Благодарности: 509

Профиль | Отправить PM | Цитировать


Цитата Iska:
В смысле — ежели надо не только вывести, но и оперативно поправить содержимое и зараз же продолжить? »
Это да, понятно, что консольный вывод не предназначен для редактирования...
Но меня опять терзают смутные сомнения , что первоначальная задача растет, как на дрожжах, в нечто большее, чем предполагалось изначально, при том, что она так и не сформулирована в законченном виде... то есть простор для фантазий у нас огромен, если не бесконечен.

-------
scio me nihil scire. Ѫ


Отправлено: 20:42, 18-12-2020 | #38


Старожил


Сообщения: 286
Благодарности: 10

Профиль | Отправить PM | Цитировать


Помогите офоормить правильно для PS:

помесь ps, cmd и ерунды)
Код: Выделить весь код
$p='рабочая/папка'

:CHECK1
if (Test-Path -Path $p\source.txt=true) {       #Test-Path возвращает true, если файл существует

	write-host "Файл скачан!"
        goto :RUN1
else goto :CHECK1
}  


:RUN1
%Команда1%
%Команда2%
%Команда3%


проверяем наличие в папке файла source.txt, и переходим к выполнению команд, если файла там нет - повторяем поиск...и циклим поиск пока файл там не появится.
В идеале чтобы проверяло не только наличие файла, но и его размер, чтобы он был >0

Последний раз редактировалось 9119, 18-12-2020 в 21:24.


Отправлено: 21:15, 18-12-2020 | #39


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Но меня опять терзают смутные сомнения , что первоначальная задача растет, как на дрожжах, »
Ага. Очередная «Каша из топора»™ .

Отправлено: 22:00, 18-12-2020 | #40



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удалить в текстовом файле все строки кроме одной нужной.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Отсортировать строки в текстовом файле blackeangel Программирование и базы данных 4 10-01-2017 11:31
CMD/BAT - [решено] удалить пусты строки в текстовом файле warkdimka Скриптовые языки администрирования Windows 8 19-02-2016 15:31
CMD/BAT - [решено] удалить все пустые строки, кроме самой последней Alexander_88 Скриптовые языки администрирования Windows 8 05-01-2015 12:43
[решено] Как удалить строки в текстовом файле при отсутсвии файла в опрелеленном месте? Pozia AutoIt 23 14-05-2009 21:41
[решено] Работа из командной строки | Убрать все пробелы в текстовом файле Greyman Хочу все знать 11 17-06-2007 22:44




 
Переход