- > Data { get; private set; }
public CSVSorter()
{
Data = new List
- >();
}
public void LoadCSV(string filePath, bool hasHeader = true)
{
using (StreamReader sr = new StreamReader(filePath))
{
string line;
bool isFirstLine = true;
while ((line = sr.ReadLine()) != null)
{
List
- > csvData, bool hasHeader = true)
{
bool isFirstLine = true;
foreach (var columns in csvData)
{
var processedColumns = columns.Select(col => string.IsNullOrWhiteSpace(col) ? null : col).ToList();
if (isFirstLine && hasHeader)
{
Header = processedColumns;
isFirstLine = false;
}
else
{
Data.Add(processedColumns);
if (isFirstLine)
{
isFirstLine = false;
if (!hasHeader)
{
Header = Enumerable.Range(1, processedColumns.Count).Select(i => "Column" + i).ToList();
}
}
}
}
}
public void Sort(int[] columns, SortTypeEnum ascendingOrDescending)
{
try
{
IOrderedEnumerable
- > sortedData = null;
if (ascendingOrDescending == SortTypeEnum.Ascending)
{
sortedData = Data.OrderBy(row => GetColumnValueSafe(row, columns[0]));
for (int i = 1; i < columns.Length; i++)
{
sortedData = sortedData.ThenBy(row => GetColumnValueSafe(row, columns[i]));
}
}
Data = sortedData.ToList();
}
catch (Exception ex)
{
Console.WriteLine($"Error during sorting: {ex.Message}");
Console.WriteLine(ex.StackTrace);
}
}
private string GetColumnValueSafe(List
- > Get()
{
yield return Header;
foreach (var row in Data)
{
yield return row;
}
}
public void SaveCSV(string filePath)
{
using (StreamWriter sw = new StreamWriter(filePath))
{
// 写入标题
sw.WriteLine(string.Join(",", Header));
// 写入数据行
foreach (var row in Data)
{
sw.WriteLine(string.Join(",", row.Select(col => col ?? "")));
}
}
}
public void SaveCSV(string fileName, string fileDir)
{
string