/*+******************************************************************************************* Project : StringCheck File : filescan.c Summary : This class scans a file for instances of a search string and appends the filename, line# and matched string to a file. Classes / Fcns : Notes / Revisions : *******************************************************************************************+*/ using System; using System.IO; using System.Text.RegularExpressions; public class FileScan { /*--------------------------------------------------------- Constructors ----------------------------------------------------------*/ /*M+M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++ Method: public FileScan() Summary: Args: Modifies: Returns: M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M-M*/ public FileScan() { } /*M+M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++ Method: public FileScan(string InputFile, string OutputFile, string SearchString) Summary: Args: Modifies: Returns: M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M-M*/ public FileScan(string InputFile, string OutputFile, string SearchString) { Setup(InputFile, OutputFile, SearchString); } /*--------------------------------------------------------- Public Methods ----------------------------------------------------------*/ /*M+M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++ Method: public void Setup(string InputFile, string OutputFile, string SearchString) Summary: Args: Modifies: Returns: M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M-M*/ public void Setup(string InputFile, string OutputFile, string SearchString) { this.InputFile = InputFile; this.OutputFile = OutputFile; this.SearchString = SearchString; } /*M+M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++ Method: public int ScanFile() Summary: Args: Modifies: Returns: M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M-M*/ public int ScanFile() { /*--------------------------------------------------------- To Do: Need error checking ----------------------------------------------------------*/ StreamWriter OutputStream; StreamReader InputStream; String line, OutputString; int linenum, padding, i ; Match m; Regex r; bool excludeLine; // Open log file and input file OutputStream = File.AppendText(OutputFile); InputStream = File.OpenText(InputFile); // Build regex expression // System.ArgumentException try { r = new Regex(SearchString); } catch ( System.ArgumentException ) { Console.WriteLine("FileScan:ScanFile() - ERROR - \"{0}\" is not a valid regex expression", SearchString); return 0; } // Read input file line by line - repeat until end of file Console.WriteLine("Scanning {0} for {1}", InputFile, SearchString); linenum = 0; while ((line=InputStream.ReadLine())!=null) { linenum++; m = r.Match(line); if (m.Success) { // Remove leading spaces padding = 0; while ( line[padding] == ' ') { padding++; } line = line.Substring(padding); // check exclusions excludeLine = false; foreach (string s in FileScan.excludes) { if ( -1 != line.IndexOf(s) ) { excludeLine = true; break; } } if ( excludeLine == false ) { // Write to output file in CSV format //OutputString = "\"" + InputFile + "\"," + linenum + ",\"" + line + "\""; OutputString = InputFile + "~" + linenum + "~" + line; OutputStream.WriteLine(OutputString); } } } // cleanup and return OutputStream.Flush(); OutputStream.Close(); InputStream.Close(); return 1; } /*--------------------------------------------------------- // member vars ----------------------------------------------------------*/ private string InputFile = ""; private string OutputFile = "out.txt"; private string SearchString = "*"; static string[] excludes = { "DllImport", "///", "StringTable.GetString", "new Button", "FillSpec.Parse", "case \"", "Debug.Assert", "Debug.Fail", "Debug.WriteLine", "MessageTrace" }; } // class FileScan