예제 #1
0
        public static void TransFile(string inFileName, FileType fileType, bool hasHeader, string[] header = null)
        {
            var outFileName = inFileName.Replace(".csv", "_converted.csv");
            var logFileName = inFileName.Replace(".csv", "_log.txt");
            var lineNo      = 0;
            var failedNo    = 0;

            using (var logStreamWriter = new StreamWriter(logFileName))
            {
                logStreamWriter.WriteLine($"Started to transform data from file: {inFileName}");
                if (hasHeader == false && header == null)
                {
                    logStreamWriter.WriteLine($"Header is important for convert, it must in file or in parameters");
                    return;
                }

                using (var inStreamWriter = new StreamReader(inFileName))
                {
                    using (var outStreamWriter = new StreamWriter(outFileName))
                    {
                        outStreamWriter.WriteLine("AccountCode,Name,Type,Open Date,Currency");
                        lineNo++;
                        var readLine      = inStreamWriter.ReadLine();
                        var accountAction = new AccountAction();
                        if (hasHeader && readLine != null)
                        {
                            var headerFields = readLine.Split(',');
                            accountAction.MapActions(headerFields);
                            lineNo++;
                            readLine = inStreamWriter.ReadLine();
                        }
                        else
                        {
                            accountAction.MapActions(header);
                        }

                        while (readLine != null)
                        {
                            var fields = readLine.Split(',');

                            var account = CreateAccountStandard(accountAction, fields);
                            if (account != null)
                            {
                                outStreamWriter.WriteLine(account.ToString());
                            }
                            else
                            {
                                failedNo++;
                                logStreamWriter.WriteLine($"Failed, Wrong format in line: {lineNo}: {string.Join(",",fields)}");
                            }

                            lineNo++;
                            readLine = inStreamWriter.ReadLine();
                        }
                    }
                }

                logStreamWriter.WriteLine($"Finished to transform data to file: {outFileName}");
                logStreamWriter.WriteLine($"HasHeader: {hasHeader.ToString()}, Succeed line: {lineNo - failedNo - 1}, Failed: {failedNo}, Total: {lineNo - 1}.");
                logStreamWriter.WriteLine($"----------------------END---------------------");
            }
        }