From: Max B. <be...@ma...> - 2003-11-20 10:55:21
|
This is a forwarded message From: Max Belugin <be...@ma...> To: fid...@ta... <fid...@ta...> Date: Wednesday, November 19, 2003, 11:13:03 AM Subject: ===8<==============Original message text=============== Hello fido7, SU> Задача: Есть куча тестовых файлов. Требуется просканировать все эти SU> текстовые файлы и получить список всех строк, содержащих определенную SU> подстроку и записать его в текстовый файл log-файл в следующем формате: SU> <Имя файла1>: SU> строка1 SU> строка2 SU> ... SU> <Имя файла2>: SU> строка1 SU> строка2 SU> ... SU> итд. SU> Есть готовое решение? Желательно привести реальный пример. Это простой скрипт. Вот например на Питоне, а ниже на js searcher.py: # -*- coding: cp1251 -*- import os import re searchString="test" # для всех файлов в текущей папке for fileName in os.listdir("."): fileNamePrinted=False # если совпадает с маской if re.match(".*\.txt$", fileName, re.I): # для каждой строки файла for line in file(fileName): # если есть строка поиска if line.find(searchString)!=-1: # если еще не напечатали имя файла if not fileNamePrinted: # печатаем его print fileName+":" # и запоминаем этот факт fileNamePrinted=True # печатаем строку print line searcher.js: var searchString="test"; var fs //: FileSystemObject = new ActiveXObject("Scripting.FileSystemObject"); var folder // : Folder = fs.GetFolder("."); var eFiles=new Enumerator(folder.Files); for (;!eFiles.atEnd(); eFiles.moveNext()){ var fileNamePrinted=false; var file //:File = eFiles.item(); if(file.Name.match(/.*\.txt$/i)){ var src //:TextStream =file.OpenAsTextStream(); while(!src.AtEndOfStream){ var s // :String =src.ReadLine(); if(s.indexOf(searchString)!=-1){ if(!fileNamePrinted){ WScript.Echo(file.Name+":"); fileNamePrinted=true; } WScript.Echo(s); } } } } //Files collection Best regards, Max http://farplugins.sf.net ICQ:9406811 ===8<===========End of original message text=========== -- Best regards, Max mailto:be...@ma... http://belugin.newmail.ru ICQ:9406811 |