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

Удалить из файла определенное значение внутри строки

18.05.2017, 14:42. Показов 3758. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можете подсказать, дано файл на 30 строк. В нем требуется найти кусок текста, допустим "Проверка услуги" и удалить. Причем строку, где есть данный текст, удалять не нужно.
findstr делает немного не то
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.05.2017, 14:42
Ответы с готовыми решениями:

Удалить лишние строки в которых есть определенное значение
Доброго времени суток! Есть переменная типа String, в ней содержится 900 строк. формата: Like= 0 can_post= True can_post_group=...

Взять из строки определенное значение(из файла)
Нужно из строки в файле(29.04.2013 к примеру) взять только 04 и сравнить с другой строкой Как это сделать?

Нужно считать с файла определенное число символов и эти символы удалить из файла
Нужно считать с файла определенное число символов и эти символы удалить из файла

20
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
18.05.2017, 14:46
каждую строку в переменную через цыкл ,а дальше так
Windows Batch file
1
"!a:Проверка услуги=!"
вот так удалиться кусок подстроки из строки.
0
0 / 0 / 0
Регистрация: 30.08.2013
Сообщений: 8
18.05.2017, 15:05  [ТС]
Не понял, можешь пример показать?

Добавлено через 8 минут
Если искать в строке такое, то ломается:
Code
1
width="413" height="73"
0
zb
7 / 7 / 0
Регистрация: 08.05.2017
Сообщений: 55
18.05.2017, 23:52
алгоритм решения:
1)в цикле обрубать по символу пока не станет равно пустой строке и запомнить длину строки;
2)в цикле двигать по строке окно размером с подстроку пока не достигнет конца, либо пока не встретится в окне подстрока (с экранированными через переменную кавычками) равная данной (опять через if сравнивать);
3)вырезать нужные позиции символов.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
19.05.2017, 00:11
Цитата Сообщение от CompBOO Посмотреть сообщение
дано файл
расширение, кодировка, примерное содержимое нужного куска в котором строка в которой что-то надо удалять или лучше целиком и отдельно повторить что удалить
0
0 / 0 / 0
Регистрация: 30.08.2013
Сообщений: 8
19.05.2017, 07:10  [ТС]
HTML5
1
2
3
4
5
6
7
8
строчки с содержанием html
                </font>
                <font size="3" color="#1F497D" face="Calibri">С уважением</font><font size="1">,
                <br><br>                                                          
                </font>
                <a href="http://www.name.ru/"><img moz-do-not-send="false" src="file:///C:/1/1.gif" width="413" height="73" border="0"></a>
                
что-то еще дальше
нужно удалить из 6 строки фразу
width="413" height="73"
0
zb
7 / 7 / 0
Регистрация: 08.05.2017
Сообщений: 55
19.05.2017, 08:52
блокнот, Ctrl+H, верхнее поле подстрока (width="413" height="73"), нижнее поле пустая строка, заменить все.
0
 Аватар для volodin661
6627 / 2258 / 346
Регистрация: 10.12.2013
Сообщений: 7,809
19.05.2017, 20:15
Цитата Сообщение от zb Посмотреть сообщение
блокнот, Ctrl+H, верхнее поле подстрока (width="413" height="73"), нижнее поле пустая строка, заменить все.
вот, наконец-то !
тешу себя надеждой, что мои усилия по пропаганде стратегии
выдвижения здравого смысла в foreground при решении разнообразных задач в сфере IT,
связанных с автоматизацией действий пользователя операционной системы Windows разных версий с
помощью возможностей командной строки, начали приносить плоды.

Задачи по различным манипуляциям с текстом можно решать с помощью программ для различных
манипуляций с текстом; таковыми являются (сюрприз!) текстовые редакторы,
работа в которых характерна тем, что от пользователя требуются простые 'житейские' действия,
а не знание языков программирования и навыков работы с ними.

( Ну, выпил, да, так пятница же )

С 'Блокнотом' делать нечего, но Vim умеет выполнять внешние команды,
а также действия пользователя, записанные скриптом.

создаю файл(vim-script) my.vim :

Code
1
2
/width="413" height="73"/s
exit
и файл doit.bat
Windows Batch file
1
@vim -S my.vim file.html
после исполнения последнего файл file.html обеднеет на слова width="413" height="73"
0
zb
19.05.2017, 21:41

Не по теме:

volodin661, :beer2:
практика мне показала, что все зависит от качества программы. например, из foobar весьма хороший составитель текстовых списков т.к. нативно поддерживает взаимодействие с текстовыми редакторами и множество разных интерфейсов. в противовес специализации обычно характерной для OSS это ПО является довольно универсальным комбайном, что тоже при решении задачи перебора 20000 пар аудио-файлов помогло не использовать велосипед специально написанный конкретно для этой задачи.
т.ч. здравый смысл при выше всего и для него у меня есть специальное определение - люба задача должна быть решена минимальными средствами в достаточной степени. вся соль в том, что и как считать это минимальное.

0
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
20.05.2017, 11:46
Ну что?Придумал батник кто нибудь который сотрет подстроку вместе с ковычками?
0
zb
7 / 7 / 0
Регистрация: 08.05.2017
Сообщений: 55
20.05.2017, 15:00
придумал. в for /f завернуть if /i str1==%%i if str2==%%j и все смачно заэкранировать, но зачем?
0
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
20.05.2017, 15:04
напиши рабочий батник)
0
90 / 84 / 42
Регистрация: 27.09.2015
Сообщений: 316
20.05.2017, 15:49
Windows Batch file
1
2
3
4
5
6
7
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%t in ("width="413" height="73"") do (
    set t=%%t
    set t=!t:"413"=!
    echo.!t!
)
Разве вопрос в кавычках?
Попробуйте стереть width="413".. вопрос в знаке равенства

Добавлено через 9 минут
т.е. фактически нам нужно искать слово width(сохраняя всё до него), потом проверять следующий символ, если это равенство, то проверяем значение за знаком равенства, если это "413" height, то проверяем следующий символ, если это равенство, то проверяем 4е следующих позиции, если это "73", то идём до конца строки, сохраняя остаток в переменную, в которой уже имеется значение находящееся до width, заменяем строку полученным значением.
0
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
20.05.2017, 17:45
Хватит теорий.Батник в студию.
0
90 / 84 / 42
Регистрация: 27.09.2015
Сообщений: 316
20.05.2017, 17:45
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
32
33
34
35
36
37
38
39
40
@echo off
setlocal enabledelayedexpansion
chcp 1251
::::::::::::::::::::::::::SETTINGS
set "pathToFile=            путь до файла"
set "mask=width="413" height="73""
::::::::::::::::::::::::::END SETTINGS
set "skipStr=0"
set "storeStr="
echo.>%appdata%\tmp&type "%pathToFile%" >>%appdata%\tmp&>"%pathToFile%" (<nul set/p=)
:loop
set /a skipStr+=1
set "forParam=usebackq skip=%skipStr% delims="
for /f "%forParam%" %%t in ("%appdata%\tmp") do (
    set str=%%t
    set i=2
    goto:parseStr
)
goto:end
:parseStr
    set "inxMask=0"
    set "unchkLetter="
     for /l %%t in (0,1,999) do (
        set "lettStr=!str:~%%t,1!"
        if "!lettStr!"=="" (
>>"%pathToFile%"            echo.!storeStr!&set "storeStr="
            set "forParam=usebackq skip=%skipStr% delims="
            goto:loop
        ) else (
            set "unchkLetter=!unchkLetter!!lettStr!"
            for /f %%t in ("!inxMask!") do (set "lettMask=!mask:~%%t,1!"&if "!lettMask!"=="" (set "unchkLetter="))
            if "!lettStr!"=="!lettMask!" (
                set /a "inxMask+=1"
            ) else (
                set "storeStr=!storeStr!!unchkLetter!"&set "unchkLetter="
                set "inxMask=0"
            )
        )
     )
:end
1
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
21.05.2017, 15:58
Лучший ответ Сообщение было отмечено CompBOO как решение

Решение

Цитата Сообщение от mir16 Посмотреть сообщение
Попробуйте стереть width="413".. вопрос в знаке равенства
Цитата Сообщение от ZoOoO Посмотреть сообщение
Хватит теорий.Батник в студию.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
<"file.html">$ (for /f "delims=" %%a in ('find /n /v ""') do @set "s=%%a"& echo "%%~a"|>nul findstr "width= height=" && (
  call :#
 ) || (
  cmd/v/c echo[!s:*]^^=!
 )
)& >nul move $ "file.html"
exit
 
:#
 @setlocal enabledelayedexpansion
  @set "s=%s:*]=%"
  @for %%a in ("%s: =" "%") do @echo "%%~a"|>nul findstr /v /c:"width=" /c:"height=" && set "sm=!sm!%%~a "
  @for /f "delims=" %%a in ("%sm:~,-1%") do @echo %%a
 @endlocal
@exit /b
использован для теста кусок файла, предоставленный CompBOO в п6
кодировка везде использовалась 866 (у меня такая по-умолчанию)

Добавлено через 4 минуты
mir16,
ваш код вот во что превратил тот-же кусок из п6
Кликните здесь для просмотра всего текста

строчки с содержа
</font>
<font size="3" color="#1F497D" face="Calibri">С уваже
<br><br>
</font>
<a href="http://www.name.ru/"><img moz-do-not-send="false" src="file:///C:/1/1.gif" border="0"></a>

что-то еще дальше


Добавлено через 20 часов 18 минут
даже еще один вариант могу подкинуть (тоже с форматированием текста):
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
<"file.html">$ (for /f "delims=" %%a in ('find /n /v ""') do @(
  set "s=%%a"& echo "%%~a"|>nul findstr /rc:"\<width="[0-9][0-9]*" height="[0-9][0-9]*"\>" && (
   for /f "tokens=2-8" %%A in ("%%~a") do @echo:                %%A %%B %%C %%D %%G
  ) || (
   cmd/v/c echo[!s:*]^^=!
  )
 )
)& >nul move $ "file.html"
exit
1
 Аватар для volodin661
6627 / 2258 / 346
Регистрация: 10.12.2013
Сообщений: 7,809
21.05.2017, 20:18
увы, alpap, не работает.

а вот так работает:

файл editfile.sql:
SQL
1
2
3
4
5
6
7
CREATE TABLE files(name TEXT, content TEXT);
INSERT INTO files(name,content) VALUES('file.html', readfile('file.html'));
SELECT content FROM files WHERE name="file.html";
UPDATE files SET content = REPLACE(content, 'width="413" height="73"', '' ) WHERE name ='file.html';
SELECT writefile('file.html', content) FROM files WHERE name='file.html';
 
.exit
Windows Batch file
1
2
chcp 1251
sqlite3 < editfile.sql
Файл sqlite3.exe представляет собой command-line реализацию замечательной встраиваемой СУБД sqlite для Windows *,
имеет размер 500К,
скачивается с оф. сайта
и забрасывается в системный каталог, чтоб не мучиться с PATH.




(*) данная СУБД работает на всех телефонных OS: андроидах, айфонах, Windows-фонах, симбианах,
блэкберри для хранения смс, истории звонков итд; а также в браузерах Chrome, Opera, Mozilla, Safari
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
21.05.2017, 21:38
volodin661,
у меня как раз vim-овский из п8 не работает, а свои оба варианта проверял только на кусочке из п6 - отработали оба и с правильным форматированием
хотелось бы vim добить, краткость прельщает более остального здесь представленного.
0
0 / 0 / 0
Регистрация: 30.08.2013
Сообщений: 8
22.05.2017, 08:54  [ТС]
Пытаюсь сейчас скрипт из п16 запихать в цикл, чтобы не ходить по всем компам и не запускать его. Компов примерно 500. На каждом местоположение файла одинаковое, вида C:\podpis\1.html

Можно ли как-то удаленно запускать скрипт скажем с админского ПК?
Второй вариант это копирование и запуск через psexec самого скрипта уже на ПК пользователя.

Попытался сделать, но не работает.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
for /f %%i in (C:\scripts\pc.txt) do (
<"\\%%i\C$\podpis\file.html">$ (for /f "delims=" %%a in ('find /n /v ""') do @set "s=%%a"& echo "%%~a"|>nul findstr "width= height=" && (
  call :#
 ) || (
  cmd/v/c echo[!s:*]^^=!
 )
)& >nul move $ "\\%%i\C$\podpis\file.html"
exit
 
:#
 @setlocal enabledelayedexpansion
  @set "s=%s:*]=%"
  @for %%a in ("%s: =" "%") do @echo "%%~a"|>nul findstr /v /c:"width=" /c:"height=" && set "sm=!sm!%%~a "
  @for /f "delims=" %%a in ("%sm:~,-1%") do @echo %%a
 @endlocal
@exit /b
)
0
Любознательный
 Аватар для YuS_2
7401 / 2247 / 359
Регистрация: 10.03.2016
Сообщений: 5,187
22.05.2017, 11:06
Цитата Сообщение от alpap Посмотреть сообщение
хотелось бы vim добить, краткость прельщает более остального здесь представленного.
скан достаточно хорошего качества.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.05.2017, 11:06
Помогаю со студенческими работами здесь

Удалить определенное слово из строки
Я недавно начал изучать язык програмирования. Мне задали задания удалить из строки все слова больше за 5 символов. Заранее всем спасибо.

Удалить определенное содержимое файла
Программа создаёт файл, и вписывает в него определённое количество записей (строки). Задача в том, что нужно удалить всё содержимое файла...

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

В определенное место строки вставить значение переменной
Друзья объясните такую штуку. На PHP это выглядит так.. $stroka = &quot;Kapital=evro&quot;; $a = 1000; $stroka =&quot;Kapital =$a evro&quot; ...

Выборка строки в которой сумма превысила определенное значение
У меня есть запрос, его цель найти время datetime когда определенный пользователь набрал дополнительный бал и общая сумма баллов к примеру...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru