перезапись в тот же файл
Имеется стандартный код для замены в файле символов @ на символы #
Цитата:
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();
|
Исходный файл считывается построчно и измененные строки записываются в новый файл.
Можно ли записать их в исходный файл, удали прежние строки?
|
Можно. Каков примерный объём отдельного файла?
|
greg zakharov |
01-07-2015 20:30 2524810 |
Всего лишь пример:
Код:
(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, можно через него.
|
При таких размерах с точки зрения производительности имеет смысл читать/писать не построчно (и не разбирать/собирать в массив), а целиком.
Я могу Вам такое «нарисовать» на VBScript. Если Вам обязательно на JScript (у меня нет желания с ним связываться), то просите коллегу greg zakharov'а или других коллег.
|
Цитата:
Цитата Iska
Я могу Вам такое «нарисовать» на VBScript. »
|
буду признателен
|
Примерно так (не проверялось):
Скрытый текст
Код:
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
Путь к целевому файлу указывается аргументом скрипта (также можно просто перетащить целевой файл на скрипт в Проводнике).
|
Да, спасибо, работает. Я даже приспособил его через батник делать пакетную обработку.
|
Время: 23:38.
© OSzone.net 2001-