I have the following situation: - I need to iterate through many streamed, comma-delimited, input files (with different numbers of comma de-limited fields and internal structures); re-format them (selecting common fields from the different files); and output them into a common file. - The input files all have similar characteristics - I need to open them, iterate through each line, determine how many commas there are per line, and close them. It is the detailed formatting for each file that is different. - To achieve this I can define a parent class (FileMgr), and inherit the majority of the functionality in file-specific sub-classes (FileMgrType1, FileMgrType2,...). I then implement a file-type specific Format method in the child classes.
So far, so good. >From the client side, I would like to iterate in a loop, processing a new file on each re-pass. At the start of iteration I would like to open the new input file, and create a file-specific object that can format and hold the variables for that type of file - using as few fileType specific lines of code as possible. I include a (contrived) sample of the sort of thing that I would like to do. I (unsuprisingly) get compilation errors - error CS0128, local variable already defined in this scope - because I am trying to 're-use' the same variable name for different objects in my Main. I could cut and paste the same code (with slightly different variable names) - but if I need to open 50 different files, then this becomes cumbersome. Is there anyway of achieving what I want to do? Regards -Steve Simpson using System; using System.IO; using System.Text; namespace PolyClient { /// <summary> /// Summary description for Class1. /// </summary> /// // A class to format & hold an input record as an intermediate, formatted object class FileMgr { public int numberFieldsInInput; public string [] fields; // a whole load of common attributes, and associated public accessors to hold the data elements // public string TodaysDate; // public int RecordId; // etc. etc. virtual public void Format ( string foo) { // extract the field values from the string, and put into the class members. } } // A class to do formatting for Type1s class FileMgrType1 : FileMgr { public void setnumberFieldsInInput() { numberFieldsInInput = 10 ; } override public void Format (string foo) { fields = foo.Split(new Char[] {','}); // do a load of formatting here } // A class to do formatting for Type2s class FileMgrType2 : FileMgr { public void setnumberFieldsInInput() { numberFieldsInInput = 15 ; } override public void Format (string foo) { fields = foo.Split(new Char[] {','}); // do a load of formatting here } } class Class1 { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main(string[] args) { int i; const int noFiles = 2; string currentRecord; // Create an output file here... for (i=0; i < noFiles; i++) { switch (i) { case 1: StreamReader inFile =new StreamReader("type1.txt", Encoding.ASCII); FileMgrType1 fileMgr = new FileMgrType1(); break; case 2: StreamReader inFile =new StreamReader("type2.txt", Encoding.ASCII); FileMgrType2 fileMgr = new FileMgrType2(); break; } while ((currentRecord = inFile.ReadLine()) != null) { fileMgr.Next (currentRecord); // Lots of other stuff to do here // Output contents of fileMgr public members into output file here... } inFile.Close(); i++; } } } } } You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com.