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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Построчное чтение "большого" файла и замена символов

Ответить
Настройки темы
VBS/WSH/JS - [решено] Построчное чтение "большого" файла и замена символов

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


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

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


Доброго времени суток!

Прошу помощи при решении следующего вопроса!
Имеется файл размером около 600 Мегабайт, каждый день он обновляется и в нём требуется выполнять следующий преобразования:
1) Удалить все строки которые начинаются с "ФИО"
2) Выполнить ряд последовательных замен:
заменить ;" на "
заменить ; на -
заменить " =" на ;
удалить ="
удалить "

Получилось сделать замену для маленьких файлов но тут видимо требуется построчное чтение и замена, а я в данном языке не сильно соображаю.
Заранее спасибо всем кто откликнется и поможет реализовать данную задачу хотя бы частично.

Отправлено: 13:11, 22-08-2013

 

Ветеран


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

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


Цитата phenoMANon:
каждый день он обновляется »
Он при этом дописывается или полностью заменяется на новый?

Приведите пример файла (разумеется, не на все 600 Мб, а на несколько килобайт из него — упакуйте в архив и прикрепите архив к сообщению; либо выложите на RGhost, а ссылку — сюда).

Отправлено: 13:26, 22-08-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


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


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

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


Цитата Iska:
Он при этом дописывается или полностью заменяется на новый? »
После преобразований в файле он перемещается в другую папку, а на следующий день на его место записывается новый файл с тем же именем и аналогичной структурой. Это некий лог файл за предыдущий день.

Отправлено: 13:30, 22-08-2013 | #3


Ветеран


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

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


phenoMANon, ясно. Тогда ждём образец файла для обработки, в котором было бы всё указанное для замены:
Цитата phenoMANon:
1) Удалить все строки которые начинаются с "ФИО"
2) Выполнить ряд последовательных замен:
заменить ;" на "
заменить ; на -
заменить " =" на ;
удалить ="
удалить " »

Отправлено: 13:58, 22-08-2013 | #4


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


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

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



Прикладываю два архива, первый Исходный - пример того, над чем требуется производить преобразования, второй Результат - это то что примерно должно быть в итоге (обрабатываю вручную в FAR). Файлы в формате .csv но прекрасно читаются как текст в любом текстовом редакторе, будь то хоть блокнот, хоть FAR.
Исходный.rar

Результат.rar

Отправлено: 06:00, 23-08-2013 | #5


Ветеран


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

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


Примерно так:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim strSourceFile
Dim strTempFile
Dim strBakFile

Dim objFSO
Dim objTS

Dim strLine


If WScript.Arguments.Count = 1 Then
	strSourceFile = WScript.Arguments.Item(0)
	
	Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
	
	If objFSO.FileExists(strSourceFile) Then
		strTempFile = GetTempName()
		
		Set objTS = objFSO.CreateTextFile(strTempFile)
		
		With objFSO.OpenTextFile(strSourceFile)
			Do Until .AtEndOfStream
				strLine = .ReadLine()
				
				If Not Left(strLine, Len("""ФИО""")) = """ФИО""" Then
					strLine = Replace(strLine, ";""", """")
					strLine = Replace(strLine, ";", "-")
					strLine = Replace(strLine, """	=""", ";")
					strLine = Replace(strLine, """	", "")
					strLine = Replace(strLine, "=""", "")
					strLine = Replace(strLine, """", "")
					
					objTS.WriteLine strLine
				End If
			Loop
			
			.Close
		End With
		
		objTS.Close
		
		Set objTS = Nothing
		
		strBakFile = objFSO.BuildPath(objFSO.GetParentFolderName(strSourceFile), objFSO.GetBaseName(strSourceFile) & ".bak")
		
		If objFSO.FileExists(strBakFile) Then
			objFSO.DeleteFile strBakFile, True
		End If
		
		objFSO.GetFile(strSourceFile).Name = objFSO.GetBaseName(strSourceFile) & ".bak"
		objFSO.CopyFile strTempFile, strSourceFile, True
		objFSO.DeleteFile strTempFile, True
	Else
		WScript.Echo "Can't find source file [" & strSourceFile & "]."
	End If
Else
	WScript.Echo "Usage: wscript.exe """ & WScript.ScriptFullName & """ <Source file>"
End If

WScript.Quit 0

Function GetTempName()
	Dim strTempName
	
	Do
		strTempName = objFSO.BuildPath(objFSO.GetSpecialFolder(2), objFSO.GetTempName)
	Loop While objFSO.FileExists(strTempName)
	
	GetTempName = strTempName
End Function
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:30, 23-08-2013 | #6


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


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

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


СПАСИБО огромнейшее! Всё работает отлично!

Отправлено: 10:44, 23-08-2013 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Построчное чтение "большого" файла и замена символов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Построчное чтение файла и запись в другой acefoster Скриптовые языки администрирования Windows 11 28-03-2024 08:02
[решено] Построчное чтение файла в Bash FATruden Программирование в *nix 11 19-05-2017 00:44
Интерфейс - как искать в содержимом файлов не "слово или фразу", а "вхождение символов"? w95w7 Microsoft Windows 2000/XP 0 11-10-2011 18:41
Атрибут файла "только чтение" bismarck Лечение систем от вредоносных программ 3 25-03-2010 21:01
Самопроизвольно запрещаются права на "Полный доступ"/"Чтение" различных веток реестра xoomer Microsoft Windows 2000/XP 2 23-04-2007 10:29




 
Переход