| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | using System;using System.Collections.Generic;using System.IO;using System.Text;namespace Wayne.Lib.IO{                public class ExcelFile    {        #region Fields        private readonly IFileSupport fileSupport;        #endregion        #region Construction                                        public ExcelFile(IServiceLocator serviceLocator)        {            fileSupport = serviceLocator.GetService<IFileSupport>();        }        #endregion        #region Properties                                public const string FileExtension = ".csv";                                public readonly List<List<string>> Rows = new List<List<string>>();        #endregion        #region Methods                                        public void SaveToFile(string fileName)        {            if (!Path.GetExtension(fileName).Equals(FileExtension, StringComparison.CurrentCultureIgnoreCase))                fileName += FileExtension;            using (Stream stream = fileSupport.Open(fileName, FileMode.Create, FileAccess.Write, FileShare.None))            {                using (StreamWriter streamWriter = new StreamWriter(stream))                {                    foreach (List<string> row in Rows)                        streamWriter.WriteLine(GetCsvRowString(row));                }            }        }                                        public void LoadFromFile(string fileName)        {            Rows.Clear();            using (Stream stream = fileSupport.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))            {                using (StreamReader streamReader = new StreamReader(stream))                {                    while (!streamReader.EndOfStream)                    {                        Rows.Add(GetCsvRowStringList(streamReader.ReadLine()));                    }                }            }        }        private static string GetCsvRowString(IList<string> row)        {            List<string> stringItems = new List<string>();            for (int i = 0; i < row.Count; i++)            {                if (row[i] != null)                {                    string stringItem = row[i].Replace("\"", "\"\"").Replace("\r", "").Replace("\n", "");                    if ((stringItem.IndexOf(',') > -1) || (stringItem.IndexOf(';') > -1) ||                        (stringItem.IndexOf('"') > -1) ||                        stringItem.StartsWith(" ") || stringItem.EndsWith(" ") ||                        stringItem.StartsWith("\t") || stringItem.EndsWith("\t"))                    {                        stringItems.Add(string.Concat("\"", stringItem, "\""));                    }                    else                        stringItems.Add(stringItem);                }            }            return string.Join(";", stringItems.ToArray());        }        private static List<string> GetCsvRowStringList(string row)        {            List<string> stringItems = new List<string>();            bool inString = false;            StringBuilder currentCell = new StringBuilder();            for (int i = 0; i < row.Length; i++)            {                char thisChar = row[i];                char nextChar = i < row.Length - 1 ? row[i + 1] : '\0';                if (thisChar == '"')                {                    if (inString)                    {                        if (nextChar == '"')                        {                                                        currentCell.Append('"');                            i++;                        }                        else                            inString = false;                    }                    else                        inString = true;                }                else if (thisChar == ';')                {                    if (inString)                        currentCell.Append(thisChar);                    else                    {                        stringItems.Add(currentCell.ToString());                        currentCell.Length = 0;                    }                }                else                    currentCell.Append(thisChar);            }            stringItems.Add(currentCell.ToString());            return stringItems;        }        #endregion    }}
 |