Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   обход по маске (http://forum.oszone.net/showthread.php?t=301568)

Imago_ 23-06-2015 16:42 2521543

обход по маске
 
Задача (возможно смешная)
есть код - вставляет в текстовый файл в 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 2522219

Цитата:

Цитата Imago_
vbs находится в той же папке где и изменяемый файл. »

Тогда нужен другой код, поскольку данный код работает вовсе не с той же папкой, где находится скрипт, а с текущей папкой текущего диска. То, что они могут совпадать, не делает данный код корректным.

Цитата:

Цитата Imago_
Файл "тяжелый" - от 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



Цитата:

Цитата Imago_
нужен обход по маске расширения »

Какой именно маске?

Цитата:

Цитата Imago_
причем во все файлы »

«Все файлы» — где находятся?


Время: 21:36.

Время: 21:36.
© OSzone.net 2001-