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

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

Ответить
Настройки темы
VBS/WSH/JS - перезапись в тот же файл

Пользователь


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

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


Изменения
Автор: ruslaw
Дата: 01-07-2015
Описание: коррекция комментария
Имеется стандартный код для замены в файле символов @ на символы #

Цитата:
var myFileSysObj = new ActiveXObject("Scripting.FileSystemObject");
// Создать объекты TextStream для считывания и для записи.
var myInputTextStream = myFileSysObj.OpenTextFile("E:\\depo\\test.htm", 1, true);
var myOutputTextStream = myFileSysObj.OpenTextFile("E:\\depo\\test2.htm", 2, true);
// Создать объект RegExp для замены символов @
var rest = new RegExp("@","g");
// Выполнять итерации по каждой строке с записью измененных строк во второй файл.
while(!myInputTextStream.AtEndOfStream) {
myOutputTextStream.WriteLine(myInputTextStream.ReadLine().replace(rest,"#"));
}
// Закрыть потоки в файлы.
myInputTextStream.Close();
myOutputTextStream.Close();
Исходный файл считывается построчно и измененные строки записываются в новый файл.
Можно ли записать их в исходный файл, удали прежние строки?

Отправлено: 18:01, 01-07-2015

 

Ветеран


Contributor


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

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


Можно. Каков примерный объём отдельного файла?

Отправлено: 19:24, 01-07-2015 | #2



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

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


Пользователь


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

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


от 10 кб. до 3-5 Мб.

Отправлено: 20:04, 01-07-2015 | #3


Старожил


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

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


Всего лишь пример:
Код: Выделить весь код
(function(file) {
  var fs, buf = [];
  
  try {
    with (new ActiveXObject('Scripting.FileSystemObject')) {
      fs = OpenTextFile(file, 1);
      
      while (!fs.AtEndOfStream) {
        buf.push(fs.ReadLine().replace(/@/g, '#'));
      }
      fs.Close();
      
      fs = OpenTextFile(file, 2);
      fs.Write(buf.join('\n'));
      fs.Close();
    }
  }
  catch (e) {
    WScript.echo(e);
  }
}(
  WScript.Arguments.length !== 1
  ? WScript.Quit(1)
  : WScript.Arguments.Unnamed(0)
));
Если в системе имеется SAPI.SpFileStream, можно через него.

Отправлено: 20:30, 01-07-2015 | #4


Ветеран


Contributor


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

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


Цитата ruslaw:
от 10 кб. до 3-5 Мб. »
При таких размерах с точки зрения производительности имеет смысл читать/писать не построчно (и не разбирать/собирать в массив), а целиком.

Я могу Вам такое «нарисовать» на VBScript. Если Вам обязательно на JScript (у меня нет желания с ним связываться), то просите коллегу greg zakharov'а или других коллег.

Отправлено: 06:52, 02-07-2015 | #5


Пользователь


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

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


Цитата Iska:
Я могу Вам такое «нарисовать» на VBScript. »
буду признателен

Отправлено: 11:02, 02-07-2015 | #6


Ветеран


Contributor


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

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


Примерно так (не проверялось):
Скрытый текст
Код: Выделить весь код
Option Explicit

Const ForWriting = 2


Dim strSourceFile
Dim strContent


If WScript.Arguments.Count = 1 Then
	strSourceFile = WScript.Arguments.Item(0)
	
	With WScript.CreateObject("Scripting.FileSystemObject")
		If .FileExists(strSourceFile) Then
			With .OpenTextFile(strSourceFile)
				strContent = .ReadAll()
				.Close
			End With
			
			With .OpenTextFile(strSourceFile, ForWriting)
				.Write Replace(strContent, "@", "#")
				.Close
			End With
		Else
			WScript.Echo "Can't find source file [" & strSourceFile & "]."
			WScript.Quit 2
		End If
	End With
Else
	WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>"
	WScript.Quit 1
End If

WScript.Quit 0

Путь к целевому файлу указывается аргументом скрипта (также можно просто перетащить целевой файл на скрипт в Проводнике).
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:36, 03-07-2015 | #7


Пользователь


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

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


Да, спасибо, работает. Я даже приспособил его через батник делать пакетную обработку.

Отправлено: 03:18, 04-07-2015 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Ввод и вывод в один и тот же файл. PageRage Программирование и базы данных 1 27-05-2011 11:26
Все тот же ControlSend LexaSF AutoIt 8 22-12-2010 14:52
Все тот же нет... taraga Сетевые технологии 1 03-10-2005 18:20
Все тот же Pascal... Doktor Программирование и базы данных 8 16-01-2005 21:09




 
Переход