Войти

Показать полную графическую версию : обход по маске


Imago_
23-06-2015, 16:42
Задача (возможно смешная)
есть код - вставляет в текстовый файл в 12 строку переменное значение (переменная из батника), vbs находится в той же папке где и изменяемый файл.
fName = "A_polyS.txt" ' Где текстовый файл
iStrok = 12 ' В какой строке меняем текст
Set objArgs = WScript.Arguments ' прием и обозначение переменной из батника
repTxt = objArgs(0) ' Какой текст поместим в указанную строку
Set FSO = CreateObject("Scripting.FileSystemObject")
Set F = FSO.OpenTextFile(fName, 1, False) ' Открываем исходный текст файл для чтения
AllTxt = F.ReadAll() ' Cчитываем весь файл в строковую переменную
F.Close ' Закрываем файл
Mas = Split(AllTxt, vbCrLf) ' Разбиваем полученную строку в массив. Резделитель - конец строки и перевод строки vbCrLf
If UBound(Mas) + 1 >= iStrok Then
Mas(iStrok - 1) = repTxt ' Заменяем нужный элемент массива (строку текста) заданной

AllTxt = Join(Mas, vbCrLf) ' Консолидируем массив в строку для записи

Set F = FSO.OpenTextFile(fName, 2, False) ' Открываем исходный файл для записи
F.Write AllTxt ' Записываем полученное на место исходного файла
F.Close ' Закрываем файл
End If
Файл "тяжелый" - от 100 до 450 Мб, теперь их несколько - нужен обход по маске расширения, причем во все файлы переменная вставляется в 12 строку, а в одном из файлов file_Layer.txt- та же переменная вставляется в 11 строчку (12 строка без изменений)
Спасибо.

Iska
25-06-2015, 05:09
vbs находится в той же папке где и изменяемый файл. »
Тогда нужен другой код, поскольку данный код работает вовсе не с той же папкой, где находится скрипт, а с текущей папкой текущего диска. То, что они могут совпадать, не делает данный код корректным.

Файл "тяжелый" - от 100 до 450 Мб »
Это что ж за файлы такие — ПСС?! В данном случае использовать разбиение прочитанного содержимого таких объёмов в массив — крайне неудачное решение, как с точки зрения расхода памяти, так и производительности. Тут лучше использовать такой код:
Option Explicit

Const ForWriting = 2


Dim strFileName
Dim lngLineNumber4Replace
Dim strString4Replace

Dim strFullFileName

Dim i
Dim strContent


strFileName = "A_polyS.txt"
lngLineNumber4Replace = 12

If WScript.Arguments.Count = 1 Then
strString4Replace = WScript.Arguments.Item(0)

With WScript.CreateObject("Scripting.FileSystemObject")
strFullFileName = .BuildPath(.GetParentFolderName(WScript.ScriptFullName), strFileName)

If .FileExists(strFullFileName) Then
strContent = ""

With .OpenTextFile(strFileName)
For i = 1 To 11
strContent = strContent & .ReadLine() & vbCrLf
Next

strContent = strContent & strString4Replace & vbCrLf
strContent = strContent & .ReadAll()

.Close
End With

With .OpenTextFile(strFileName, ForWriting)
.Write strContent
.Close
End With
Else
WScript.Echo "Can't find file [" & strFullFileName & "]."
WScript.Quit 2
End If
End With
Else
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <String for replace>"
WScript.Quit 1
End If

WScript.Quit 0


нужен обход по маске расширения »
Какой именно маске?

причем во все файлы »
«Все файлы» — где находятся?




© OSzone.net 2001-2012