Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 52

Замена текста в n-ой строке и k-ой подстроке

08.03.2019, 09:12. Показов 1255. Ответов 8

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть файлик такого типа:

0;?Is=0;!Is=4;Int=00:01:01;i0=-1,s0=9;i1.....
0;?Is=0;!Is=4;Int=00:01:01;i0=-1,s0=10.....
0;?Is=0;!Is=4;Int=00:02:01;i0=-1,s0=11....
0;?Is=0;!Is=4;Int=00:01:01;i0=-1,s0=12....
0;?Is=0;!Is=4;Int=01:06:01;i0=-1,s0=13....
....
....
....

Он состоит из 20 строк, необходимо с помощью батника заменять в 10-й строке:

0;?Is=0;!Is=4;Int=01:06:01;i0=-1,s0=13....

Только время "01:06:01" на вводимое пользователем (время в этой строке всегда разное, поскольку файл должен обновляться).

Получилось написать такой код:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off
 
Set /p A="Hours: "
Set /p B="Minutes: "
Set /p C="Seconds: "
 
Set D=:
call :sub1 "file.txt" 10
 
exit/b
 
:sub1
 set "f=%~1"& setlocal enabledelayedexpansion
 for /f %%i in ('^<"!f!" find/c /v ""') do <"!f!">.tmp (for /l %%j in (1 1 %%i) do @(
  set x=& set/p x=& if defined x (if "%%j" equ "%~2" (echo.!A!!D!!B!!D!!C!) else echo.!x!) else echo.)
 )& >nul move .tmp "!f!"
 endlocal& exit/b
Данный код находит 10-ю строку, чистит и записывает в нее введенные значения. Вопрос в том как сделать чтобы редактировать только время в строке?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.03.2019, 09:12
Ответы с готовыми решениями:

Замена картинки по подстроке
Подскажите пожалуйста, почему не работает !? Надо по наличию слова в подстроке ставить ту или иную картинку ! &lt;div...

Замена пробелов в подстроке
Мне нужно написать функцию которая будет находить и заменять обычный пробел на нижний, не совсем разобрался с функцией replace, вышло...

Замена строки в подстроке на новую строку
Все доброго времени суток. Я написал программу, которая в строке S ищет подстроку S1 и заменяет ее на строку S2, но написал я эту программу...

8
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
08.03.2019, 11:49
Самый простой способ - взять sed:
Windows Batch file
1
sed -i "10s/\(..:..:..\)/16:40:57/" file.txt
Проблема в том, как вы собираетесь проверять корректность времени? Укажет пользователь 523:41390:801 и что тогда? Лучше задумайтесь над использованием PowerShell.
0
1 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 52
08.03.2019, 17:46  [ТС]
Можете подсказать, как мне встроить этот код с sed? Просто я не совсем разбираюсь, что да как
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
08.03.2019, 18:43
Sed можно взять здесь (по крайней мере без каких-либо posix зависимостей), помещаете бинарник в одну из папок переменной PATH и пишите командный сценарий примерно следующего содержания:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@echo off
  setlocal enabledelayedexpansion
    rem просим ввести пользователя время
    set /p "tm=Enter time: "
    set "i=0" % rem : счетчик
    for %%i in ("%tm::=";"%") do (
      2>nul set /a "arr.!i!=%%~i"
      set /a "i+=1"
    )
    rem простая проверка на корректность указанного значения
    for /l %%i in (0, 1, 2) do (
      if !arr.%%i! lss 0 (
        echo:Invalid value.
        goto:eof
      )
    )
    for /l %%i in (1, 1, 2) do (
      if !arr.%%i! gtr 59 (
        echo:Invalid value.
        goto:eof
      )
    )
    if !arr.0! geq 24 (
      echo:Invalid value.
      goto:eof
    )
    rem file.txt изменить на имя файла, который нужно изменить
    rem лучше указывать с полным путем в кавычках
    sed -i "10s/\(..:..:..\)/!tm!/" file.txt
  endlocal
exit /b
0
 Аватар для volodin661
6686 / 2278 / 347
Регистрация: 10.12.2013
Сообщений: 7,872
08.03.2019, 21:00
Поменяет время в 10-ой строке файла file.txt на значение из системного буфера обмена(System clipboard) :
newtime.bat
Windows Batch file
1
@vim +10s/..:..:../\=@* +x file.txt
vim - текстовый редактор.

установка vim:
Windows Batch file
1
@choco install vim
choco - установщик программного обеспечения из репозитория Windows

установка choco:
Windows Batch file
1
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
требования к системе для установки choco:
  • Windows 7+ / Windows Server 2003+
  • PowerShell v2+
  • .NET Framework 4+ (процесс установки попробует сам установить .NET 4.0, если последний не установлен)

Добавлено через 6 минут
greg zakharov, твой ход

Добавлено через 18 минут
Поясню, почему из буфера обмена:

процесс валидации значения времени возлагается на Excel-евскую ячейку,
затем <Ctrl-C> и вперёд.

Ну выпил я коньяка, ну и что !?! Праздник же.
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
08.03.2019, 21:19
volodin661:
PowerShell
1
2
$a[9] = ($a = gc .\file.txt)[9] -replace '..:..:..', [DateTime]::Now.ToLongTimeString()
Out-File .\file -Inp $a
Но это для pwsh. Есть варианты с Perl, Ruby, SQLite, Julia, Tcl, Python, но это уже совсем офтоп. И потом нас итак уже считают здесь фриками по разуму, так что...
0
1 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 52
09.03.2019, 08:13  [ТС]
Вы, конечно, классные чуваки) но я теперь совсем ничего не понимаю
А можно ли без sed, vim, choco и прочего найти в файле подстроку "01:06:01" и заменить ее на введенные значения пользователем?
Подстрока "01:06:01" всегда находится на 10-й строке и имеет перед собой 18 символов. Можно ли исходя из этих параметров что-то смастерить?
0
1 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 52
11.03.2019, 14:06  [ТС]
greg zakharov, разобрался я с установкой sed, запустил ваш код - все работает, только он еще и меняет структура файла - т.е. теперь весь файл это одна длинная строка. Как это исправить?
0
1 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 52
16.03.2019, 05:58  [ТС]
Все разобрался)) всем спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.03.2019, 05:58
Помогаю со студенческими работами здесь

Замена текста в строке
Есть файл с заменами (что на что заменить) и есть файл, в котором нужно менять, почему не неработает? static string Zamena(Pair...

Замена текста в строке
Как можно в файле найти определенный ключ и заменить его значение (в &quot;&quot;) на новое? Например: Key=&quot;Text1&quot;, найти Key и заменить...

Замена текста в строке
Не могу понять как реализовать Replace не подойдет Допустим, у меня есть строка &quot;This was realistic filling&quot; Как заменить...

Однократная замена текста в строке по индексу
Есть строка (получена из файла). Необходимо найти текст от определенного индекса необходимой длины и заменить его на другой. В поисках ни...

Clojure Замена гласных букв в строке текста
Дана строка текста. Определить функцию, которая возвращает копию этой строки, в которой все гласные буквы заменены на букву «а». ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru