Esempio n. 1
0
        public static void ProcessLogFilesOnly(Stopwatch Watch, CommandLineArguments ParsedCommandLineArguments)
        {
            try
            {
                bool _personIdentifierIsNumber = false;
                if (ParsedCommandLineArguments.Flags.Contains("NUMERICPERSONIDENTIFIER"))
                {
                    _personIdentifierIsNumber = true;
                }

                string _personIdentifier = "PersonIdentifier";
                if (ParsedCommandLineArguments.ParameterDictionary.ContainsKey("personidentifier"))
                {
                    _personIdentifier = ParsedCommandLineArguments.ParameterDictionary["personidentifier"];
                }

                string _language = "ENG";
                if (ParsedCommandLineArguments.ParameterDictionary.ContainsKey("language"))
                {
                    _language = ParsedCommandLineArguments.ParameterDictionary["language"];
                }

                List <string> _listOfXMLFiles = new List <string>();
                List <string> _listOfZIPArchivesWithXMLFiles = new List <string>();

                foreach (string inFolder in ParsedCommandLineArguments.Transform_InputFolders)
                {
                    if (File.Exists(inFolder))
                    {
                        if (inFolder.ToLower().EndsWith(".zip"))
                        {
                            _listOfZIPArchivesWithXMLFiles.Add(inFolder);
                        }
                        else if (inFolder.ToLower().EndsWith(".xml"))
                        {
                            _listOfXMLFiles.Add(inFolder);
                        }
                    }
                    else
                    {
                        if (!Directory.Exists(inFolder))
                        {
                            if (ParsedCommandLineArguments.Verbose)
                            {
                                Console.WriteLine("Warning: Directory not exists: '" + inFolder + "'.");
                            }

                            continue;
                        }

                        var _tmpXMLFileList = Directory.GetFiles(inFolder, "*.xml", SearchOption.AllDirectories);

                        foreach (string s in _tmpXMLFileList)
                        {
                            _listOfXMLFiles.Add(s);
                        }

                        var _tmpZIPFileList = Directory.GetFiles(inFolder, "*.zip", SearchOption.AllDirectories);

                        foreach (string s in _tmpZIPFileList)
                        {
                            _listOfZIPArchivesWithXMLFiles.Add(s);
                        }
                    }
                }

                logXContainer _ret = new logXContainer()
                {
                    PersonIdentifierIsNumber = _personIdentifierIsNumber, PersonIdentifierName = _personIdentifier
                };
                _ret.LoadCodebookDictionary(ParsedCommandLineArguments.Transform_Dictionary);

                if (ParsedCommandLineArguments.Transform_ConcordanceTable.Trim() != "")
                {
                    if (File.Exists(ParsedCommandLineArguments.Transform_ConcordanceTable))
                    {
                        if (ParsedCommandLineArguments.Verbose)
                        {
                            Console.WriteLine("Read Concordance Table.");
                        }

                        _ret.ReadConcordanceTable(ParsedCommandLineArguments.Transform_ConcordanceTable);
                    }
                }

                foreach (string zfilename in _listOfZIPArchivesWithXMLFiles)
                {
                    using (ZipFile zip = ZipFile.Read(zfilename))
                    {
                        foreach (var entry in zip)
                        {
                            if (ParsedCommandLineArguments.MaxNumberOfCases > 0 && _ret.GetNumberOfPersons >= ParsedCommandLineArguments.MaxNumberOfCases)
                            {
                                break;
                            }

                            // TODO: Check FitsMask
                            if (1 == 1 || CommandLineArguments.FitsMask(entry.FileName, ParsedCommandLineArguments.Mask))
                            {
                                if (ParsedCommandLineArguments.Verbose)
                                {
                                    Console.Write("Info: Read File  '" + entry.FileName + "' ");
                                }

                                using (MemoryStream zipStream = new MemoryStream())
                                {
                                    entry.ExtractWithPassword(zipStream, "");
                                    zipStream.Position = 0;
                                    try
                                    {
                                        StreamReader sr = new StreamReader(zipStream);
                                        string       _fileContentAsString = sr.ReadToEnd();
                                        if (_fileContentAsString.Trim().Length > 0)
                                        {
                                            ReadLogDataEEFromXMLString(_fileContentAsString, _ret);
                                        }
                                    }
                                    catch (Exception _ex)
                                    {
                                        Console.WriteLine("Error processing file '" + entry.FileName + "': " + _ex.Message);
                                        return;
                                    }
                                }

                                Console.WriteLine("ok.");
                            }
                        }
                    }

                    if (ParsedCommandLineArguments.MaxNumberOfCases > 0 && _ret.GetNumberOfPersons >= ParsedCommandLineArguments.MaxNumberOfCases)
                    {
                        if (ParsedCommandLineArguments.Verbose)
                        {
                            Console.WriteLine("Info: Max number of cases reached.");
                        }
                        break;
                    }
                }

                foreach (string xfilename in _listOfXMLFiles)
                {
                    if (ParsedCommandLineArguments.MaxNumberOfCases > 0 && _ret.GetNumberOfPersons >= ParsedCommandLineArguments.MaxNumberOfCases)
                    {
                        if (ParsedCommandLineArguments.Verbose)
                        {
                            Console.WriteLine("Info: Max number of cases reached.");
                        }
                        break;
                    }

                    if (1 == 1 || CommandLineArguments.FitsMask(Path.GetFileName(xfilename), ParsedCommandLineArguments.Mask))
                    {
                        if (ParsedCommandLineArguments.Verbose)
                        {
                            Console.WriteLine("Info: Read File  '" + Path.GetFileName(xfilename) + "' ");
                        }

                        try
                        {
                            StreamReader sr = new StreamReader(xfilename);
                            string       _fileContentAsString = sr.ReadToEnd();
                            if (_fileContentAsString.Trim().Length > 0)
                            {
                                ReadLogDataEEFromXMLString(_fileContentAsString, _ret);
                            }
                        }
                        catch (Exception _ex)
                        {
                            Console.WriteLine("Error processing file '" + xfilename + "': " + _ex.Message);
                            return;
                        }
                        Console.WriteLine("ok.");
                    }
                }

                _ret.UpdateRelativeTimes();
                _ret.CreateLookup();

                if (ParsedCommandLineArguments.Transform_OutputStata.Trim() != "")
                {
                    if (ParsedCommandLineArguments.Verbose)
                    {
                        Console.WriteLine("Create ZIP archive with Stata file(s).");
                    }

                    _ret.ExportStata(ParsedCommandLineArguments.Transform_OutputStata, _language);
                }

                if (ParsedCommandLineArguments.Transform_OutputXLSX.Trim() != "")
                {
                    if (ParsedCommandLineArguments.Verbose)
                    {
                        Console.WriteLine("Create XLSX file.");
                    }

                    _ret.ExportXLSX(ParsedCommandLineArguments);
                }

                if (ParsedCommandLineArguments.Transform_OutputZCSV.Trim() != "")
                {
                    if (ParsedCommandLineArguments.Verbose)
                    {
                        Console.WriteLine("Create ZIP archive with CSV file(s).");
                    }

                    _ret.ExportCSV(ParsedCommandLineArguments);
                }

                if (ParsedCommandLineArguments.Transform_Codebook.Trim() != "")
                {
                    if (ParsedCommandLineArguments.Verbose)
                    {
                        Console.WriteLine("Create Codebook File.");
                    }

                    _ret.CreateCodebook(ParsedCommandLineArguments.Transform_Codebook, _language);
                }

                if (ParsedCommandLineArguments.Transform_ConcordanceTable.Trim() != "")
                {
                    if (!File.Exists(ParsedCommandLineArguments.Transform_ConcordanceTable))
                    {
                        if (ParsedCommandLineArguments.Verbose)
                        {
                            Console.WriteLine("Create Concordance Table.");
                        }

                        _ret.CreateConcordanceTable(ParsedCommandLineArguments.Transform_ConcordanceTable);
                    }
                }

                if (_ret.ExportErrors.Count > 0)
                {
                    Console.WriteLine(_ret.ExportErrors.Count + " error(s) creating output files.");
                    if (ParsedCommandLineArguments.Verbose)
                    {
                        for (int i = 0; i < _ret.ExportErrors.Count; i++)
                        {
                            Console.WriteLine(_ret.ExportErrors[i]);
                        }
                    }
                }
            }
            catch (Exception _ex)
            {
                Console.WriteLine("Error transforming log data. Details: " + Environment.NewLine + _ex.Message.ToString());
            }
        }