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

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

Ответить
Настройки темы
Любой язык - Невозможно выполнить замену текста в текстовом файле

Аватара для CyraxZ

Ветеран


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

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


Вложения
Тип файла: txt php.ini.txt
(1.5 Kb, 1 просмотров)
Необходимо выполнить замену текста в файле с русским текстом. Для примера, необходимо цифру 1 заменить на 2. Кодировка файла - win-1251.

Вариант 1 - bat-файл:
Код: Выделить весь код
@echo off
:: -----------------------------------------
::Set verfile=php.ini
::Set tmpfile=php.ini.tmp
::Set fin=1
::Set rep=2
:: -----------------------------------------

@ECHO OFF
SETLOCAL DISABLEDELAYEDEXPANSION

set INTEXTFILE=php.ini
set OUTTEXTFILE=php.ini.tmp
set SEARCHTEXT=1
set REPLACETEXT=2

FOR /F %%L IN (php.ini) DO (
  SET "line=%%L"
  SETLOCAL ENABLEDELAYEDEXPANSION
  ECHO !line:%SEARCHTEXT%=%REPLACETEXT%!>>%OUTTEXTFILE%
  ENDLOCAL
)
ENDLOCAL
В итоге получаем файл без комментариев, без пустых строк и без некоторых директив.

Вариант 2. Утилита FART
Код: Выделить весь код
fart.exe -p  -- php.ini 1 2
Эта утилита ничего не находит в сабжевом файле. Находит, только если убрать русский текст.

Вопрос: в Windows XP вообще возможно выполнить элементарную замену текста ?

Отправлено: 23:28, 27-11-2016

 

Ветеран


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

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


CyraxZ, пакетные файлы, мягко говоря, вообще не особо предназначены для операций поиска и замены текста — весьма ограниченный функционал. Но со времён Windows 98 в комплекте ОС идёт WSH — Windows Script Host, с несколькими входными языками (в комплекте идут VBScript и JScript).

Для простоты понимания идеи я не стал обременять код поддержкой параметров, разнообразными проверками и созданием резервной копии:
Код: Выделить весь код
Option Explicit

Dim strSourceFile
Dim strContent


strSourceFile = "C:\Мои проекты\0027\php.ini"

With WScript.CreateObject("Scripting.FileSystemObject")
	With .OpenTextFile(strSourceFile)
		strContent = .ReadAll()
		.Close
	End With
	
	With .CreateTextFile(strSourceFile)
		.Write Replace(strContent, "1", "2")
		.Close
	End With
End With

WScript.Quit 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:43, 27-11-2016 | #2



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

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


Аватара для CyraxZ

Ветеран


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

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


Да. vbs работает нормально.
В общем-то, что угодно можно запрограммировать. Без всяких батников и без всяких утилит. Во как !

Отправлено: 01:21, 28-11-2016 | #3


Ветеран


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

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


Цитата CyraxZ:
В итоге получаем файл без комментариев »
По умолчанию разбор по for /f рассматривает строки, начинающиеся с символа «;», как комментарии и пропускает их. Используйте ключ «eol=» без указания значения:
Код: Выделить весь код
for /f "eol=" …
Цитата CyraxZ:
без пустых строк »
Разбор по for /f пропускает пустые строки. Управлять этим поведением невозможно, есть только методики, позволяющие использовать обходные пути, что усложняет код.

Цитата CyraxZ:
и без некоторых директив. »
Особенность языка пакетных файлов. Причём, данное поведение характерно не только для них, но для кучи других языков, либо не имеющих отдельного литерала «Строка», либо рассматривающего его с ограничениями (например, терминатор в C), либо — т.н. escape-символы внутри строки (те же пакетные файлы, C, отчасти PowerShell и пр.).

Цитата CyraxZ:
В общем-то, что угодно можно запрограммировать. Без всяких батников и без всяких утилит. Во как ! »
К сожалению, не всё, есть достаточно много проблем. Поэтому, начиная с Vista, появился ещё один язык — PowerShell (доступен и для Windows XP).

Последний раз редактировалось Iska, 28-11-2016 в 03:59. Причина: Грамматика

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:20, 28-11-2016 | #4



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как сделать частичную замену текста. NikolayHAOS Вебмастеру 5 18-11-2015 09:00
Ошибка - Ошибка в текстовом файле Innuenze Microsoft Windows 2000/XP 2 11-08-2014 09:35
Разное - Нужна специфическая программа по замену текста daf010 Программирование и базы данных 2 08-03-2014 01:15
VBS/WSH/JS - Поиск\редактирование строки в текстовом файле pavvel Скриптовые языки администрирования Windows 2 11-04-2012 16:38
подсчёт слов в текстовом файле bakatum Хочу все знать 4 22-01-2010 21:10




 
Переход