Войти

Показать полную графическую версию : [решено] VBS скрип по редактированию .ORA файла


ospekt00
26-05-2017, 08:06
Добрый день Форумчане, есть такой вопрос, можно ли на VBS открыть файл .ORA (в частности listener.ora файл с настройками базы данных oracle XE), сам данный файл можно открыть и отредактировать блокнотом, нужно его открыть и дописать в конец файла некое содержимое. Как это можно сделать на VBS???
Файл есть во вложении.

greg zakharov
26-05-2017, 09:33
дописать в конец файла некое содержимоеВидимо айпишник хоста и имя БД...
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objFile : Set objFile = objFSO.OpenTextFile("listner.ora", 8, False)
objFile.Write "blablabla"
objFile.Close
Set objFile = Nothing
Set objFSO = Nothing

ospekt00
26-05-2017, 10:24
Спасибо за ответ, а можно ли дописать что то после определенной строки, например после 8 строки от начала файла?

greg zakharov
26-05-2017, 10:35
Инжекта строки "на лету", насколько помню, в Васе нет, но это можно преодолеть, скажем, считав файл целиком и разбив его на массив строк с последующей "вставкой" в него нужной строки.

ospekt00
26-05-2017, 10:38
Можете показать пример того как это можно сделать?
Заранее благодарю!

Iska
26-05-2017, 10:55
а можно ли дописать что то после определенной строки, »
Дописывать отдельной строкой?

например после 8 строки от начала файла? »
Как быть, если строк окажется только, скажем, пять?

ospekt00
26-05-2017, 10:59
В данном файле listener.ora строк 23, вообще нужно дописать после 12 строки еще 6 строк. Можно было бы файл заменять полностью, файлом с нужным содержимым, но так как ПК с такими файлами много и имена ПК все разные то либо дописывать нужное после определенной строки, ли переписывать файл полность и по том в нужном месте еще заменять инфу с именем ПК.

greg zakharov
26-05-2017, 15:16
Можете показать пример того как это можно сделать?Честно, Васю практически не использовал, в основном налегал на JScript, решение на котором будет примерно таким:
with (new ActiveXObject('Scripting.FileSystemObject')) {
var file = OpenTextFile('E:\\oracle\\admin\\network\\listner.ora', 1, false),
arr = file.ReadAll().split('\r\n'),
ins = [
'\nстроки, которые должны быть вставлены',
'могут быть представлены либо в виде',
'массива строк, либо в виде JSON\n'
].join('\n'),
res = arr.slice(0, 3).join('\n') + ins +
arr.slice(3, arr.length).join('\n');
file.Close();

file = OpenTextFile('E:\\oracle\\admin\\network\\listner.ora', 2, false);
file.Write(res);
file.Close();
}
Выглядит не очень эстетично, но Вам же пример нужен, а не выхоленный код, верно? Здесь вставка идет начиная с третьей строки. Если будут вопросы, отвечу как освобожусь.

ospekt00
26-05-2017, 15:45
Всем большое спасибо за помощь, данную проблему решил заменой файла и далее заменой имени в файле который скопировал на имя ПК.
Получилось что то вот такое:


Dim fso
Const OverWriteFiles = True
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
lsaptPathx = "c:\bat1"
lsoraPathx = "c:\bat"

FSO.CopyFile (lsaptPathx) , (lsoraPathx) & "\", OverWriteFiles

dim objnet
Set objnet = wscript.CreateObject("wscript.network")

Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFileLis = objFSO.OpenTextFile("c:\BAT\listener.ora", ForReading)

strText = objFileLis.ReadAll
objFileLis.Close

strOldText = "pcbd"
strNewText = objNet.ComputerName

strNewText = Replace(strText, strOldText, strNewText)

Set objFileLis = objFSO.OpenTextFile("c:\BAT\listener.ora", ForWriting)
objFileLis.WriteLine strNewText
objFileLis.Close

'**************************************************

Iska
26-05-2017, 22:16
Выглядит не очень эстетично, »
Зато дёшево надёжно и практично! - YouTube (https://www.youtube.com/watch?v=8xM1IVaZwcs) :).

На самом деле вполне себе эстетично.
res = arr.slice(0, 3).join('\n') + ins +
arr.slice(3, arr.length).join('\n');
»
выглядит вполне понятно и наглядно — берём три первых строки, «клеим» к ним вставку, к полученному «клеим» остаток строк.




© OSzone.net 2001-2012