private CsvFileStructure.LocationInFile DetermineLocationInFile(int LineIndex) { // 如果已經進入 FooterLines,則直接回傳 LocationInFile.FooterLines if (Cfs.FooterLinesCount > 0 && (FileTotalLinesCount - LineIndex) < Cfs.FooterLinesCount) { return(CsvFileStructure.LocationInFile.FooterLines); } // 針對所有分界點由低到高排序 (每個分界點皆須是 Unique,不適用的分界點為 -1) List <Tuple <int, CsvFileStructure.LocationInFile> > list = new List <Tuple <int, CsvFileStructure.LocationInFile> >(); list.Add(Tuple.Create(Cfs.HeaderLineStartAt, CsvFileStructure.LocationInFile.HeaderLines)); list.Add(Tuple.Create(Cfs.DataLinesStartAt, CsvFileStructure.LocationInFile.DataLines)); list.Sort((x, y) => x.Item1.CompareTo(y.Item1)); // 依序比較是否進入該點範圍內,直到全部比較完畢 CsvFileStructure.LocationInFile result = CsvFileStructure.LocationInFile.HeadingLines; foreach (Tuple <int, CsvFileStructure.LocationInFile> entry in list) { if (entry.Item1 <= LineIndex) { result = entry.Item2; } } return(result); }
private void ProcessForEachLine(string Line, int LineIndex) { CsvFileStructure.LocationInFile Loc = DetermineLocationInFile(LineIndex); switch (Loc) { case CsvFileStructure.LocationInFile.HeadingLines: { break; } case CsvFileStructure.LocationInFile.HeaderLines: { Headers = Line.Split(Delimiters, StringSplitOptions.RemoveEmptyEntries); break; } case CsvFileStructure.LocationInFile.DataLines: { ProcessForEachDataline(Line); break; } case CsvFileStructure.LocationInFile.FooterLines: { break; } default: { break; } } }