Каждый день мы получаем плоский текстовый файл. В некоторые дни в файле есть строки, которые необходимо удалить, прежде чем он сможет быть обработан. Эти строки могут появляться в разных местах, но всегда начинаются с символов 6999 или 7999. Мы хотели бы запустить скрипт, который удалит эти конкретные строки. Однако, и это далеко от меня, в любом месте, где есть строка, начинающаяся с 6999, будет непосредственно перед ней строка, начинающая 5442, которую также необходимо удалить, но только если она появляется непосредственно перед строкой 6999.
Мы магазин Windows и запустили бы этот скрипт как часть простого пакетного файла в Windows. Мы не используем ни Unix, ни Linux, ни желание.
Расширение имени файла отражает дату. Сегодняшний файл будет file.100621, завтра будет file.100622. У меня возникли проблемы с этим аспектом, так как кажется, что VBScript не любит файл. *
Вот пример текстового файла:
4006006602 03334060000100580
40060066039 0334070000100580
700600000011571006210060001255863
544264287250111000025000000000040008000801
6999001000000000000000000000000000000000000000000000000000
6999001000000000000000000000000000000000000000000000000000
6999001000000000000000000000000000000000000000000000000000
799900000011571006210030000000000
8007000000115710062102530054008920
Мы хотели бы удалить 5 строк в этом файле (строка 5442, три строки 6999 и строка 7999).
Вот пример скрипта, который я нашел на этом сайте, изменил и добился определенного успеха, но не знаю, как удалять строки (знаю только, как заменить данные в строке). Я понимаю, что это либо потребует серьезных модификаций, либо будет полностью исключено, но я публикую это, чтобы дать представление о том, что, по моему мнению, мы ищем. Я помещаю это в каталог с cscript.exe и вызываю его из простого командного файла:
Set objFS = CreateObject("Scripting.FileSystemObject")
strFile = "c:\temp\file.100621"
Set objFile = objFS.OpenTextFile(strFile)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
If InStr(strLine,"6999")> 0 Then
strLine = Replace(strLine,"6999","delete line")
End If
WScript.Echo strLine
Loop
Что дает мне это:
40060066039 0334070000100580
700600000011571006210060001255863
544264287250111000025000000000040008000801
delete line001000000000000000000000000000000000000000000000000000
delete line001000000000000000000000000000000000000000000000000000
delete line001000000000000000000000000000000000000000000000000000
799900000011571006210030000000000
8007000000115710062102530054008920
Закрыть! просто нужно удалить строки вместо записи "удалить строку".
Вот мои конкретные потребности, основанные на том, что я знаю:
- Получить скрипт для обработки любого файла в каталоге (и будет только 1 за раз, но расширение меняется каждый день)
- Получить скрипт для удаления любой строки, которая начинается с 5442, непосредственно перед строкой, которая начинается 6999
- Получить скрипт для полного удаления тех строк, которые начинаются с 6999 и 7999