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

Название темы: Изменение строк в файле
Показать сообщение отдельно

Новый участник


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

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


Цитата alpap:
Nikugorsk,
нужны файлы с разным содержимым или если знаете неплохо содержимое, есть ли в файле строка(и) с похожим содержимым кроме этой строки: 7,2 "Центр_1664#0", т.е если искать по символу _ или # или обеим или по кавычкам - гарантированно будет найдена только одна эта строка?

Да, гарантированно найдётся только эта строка. По любому из 3х признаков.

Цитата Iska:
На WSH:
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strSourceFolder

Dim objFSO
Dim objFile

Dim objRegExp
Dim strContent

If WScript.Arguments.Count = 1 Then
	strSourceFolder = WScript.Arguments.Item(0)
	
	Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
	
	If objFSO.FolderExists(strSourceFolder) Then
		Set objRegExp = WScript.CreateObject("VBScript.RegExp")
		
		With objRegExp
			.Pattern    = "^(.+ "")(?:.+_)(\d+)(?:#)(.+"")$"
			.Global     = True
			.MultiLine  = True
		End With
		
		For Each objFile In objFSO.GetFolder(strSourceFolder).Files
			If StrComp(objFSO.GetExtensionName(objFile.Name), "txt", 0) = 0 Then
				With objFSO.OpenTextFile(objFile.Path)
					strContent = .ReadAll()
					.Close
				End With
				
				If objRegExp.Test(strContent) Then
					objFSO.CopyFile objFile.Name, objFSO.GetBaseName(objFile.Name) & ".bak", True
					
					With objFSO.CreateTextFile(objFile.Name, True)
						.Write objRegExp.Replace(strContent, "$1$2$3")
						.Close
					End With
				Else
					' Nothing to do
				End If
			Else
				' Nothing to do
			End If
		Next
		
		Set objRegExp = Nothing
	Else
		WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
		WScript.Quit 2
	End If
	
	Set objFSO = Nothing
Else
	WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>"
	WScript.Quit 1
End If

WScript.Quit 0

Исходная папка указывается аргументом скрипта (также можно просто перетащить папку на скрипт в Проводнике). Будут обработаны все *.txt файлы из указанной папки. При нахождении шаблона в содержимом текстового файла и последующей замене делается резервная копия исходного файла с расширением .bak.

Согласно изложенным Вами выше правилам поиска и замены в выложенных для примера файлах произойдут следующие замены — в 1657.txt:
Код: Выделить весь код
11,2 "Центр_1657#0"
на:
Код: Выделить весь код
11,2 "16570"
и в 1664.txt:
Код: Выделить весь код
7,2 "Центр_1664#0"
на:
Код: Выделить весь код
7,2 "16640"
А как 0 в конце убрать? Должен остаться только 1657 и 1664

Цитата Iska:
И ещё, к словам коллеги: случайно ли то, что искомые цифры в файле совпадают с именем файла?
Это частный случай. Для примера

Отправлено: 20:11, 07-06-2018 | #7

Название темы: Изменение строк в файле