帮我写一个完整的C#读取CSV方法,要求将每一行类容存在一个二位数组返回
时间: 2025-01-01 19:40:33 浏览: 8
在C#中,我们可以使用`System.IO`和`System.Text`命名空间中的类来处理CSV文件的读取。下面是一个简单的示例,它定义了一个方法来读取CSV文件并将每一行内容存储在一个二维字符串数组中:
```csharp
using System;
using System.IO;
public class CSVReader
{
public static string[,] ReadCSV(string filePath)
{
// 检查文件是否存在
if (!File.Exists(filePath))
{
throw new FileNotFoundException("文件不存在", filePath);
}
// 初始化二维字符串数组
string[,] csvData = new string[0, 0];
try
{
// 使用StreamReader逐行读取CSV文件
using (var reader = new StreamReader(filePath, Encoding.Default))
{
string line;
while ((line = reader.ReadLine()) != null) // 避免读取空行
{
// 分割行,假设每列由逗号分隔
var fields = line.Split(',');
// 如果数组大小不足以容纳新行,动态扩大数组
if (csvData.GetLength(0) == 0 || csvData.GetLength(1) < fields.Length)
{
int rows = csvData.GetLength(0) + 1;
csvData = ResizeArray(csvData, rows, csvData.GetLength(1));
}
// 将行添加到数组中
Array.Copy(fields, 0, csvData, csvData.GetLength(0), fields.Length);
csvData.GetLength(0)++;
}
}
}
catch (Exception ex)
{
Console.WriteLine($"读取CSV文件时发生错误: {ex.Message}");
return null; // 或者抛出异常
}
return csvData;
}
// 辅助方法,用于动态扩大二维数组
private static string[, ] ResizeArray(string[,] oldArray, int newRow, int newCol)
{
string[,] newArray = new string[newRow, newCol];
Array.Copy(oldArray, newArray, Math.Min(newRow, oldArray.GetLength(0)), Math.Min(newCol, oldArray.GetLength(1)));
return newArray;
}
}
// 示例用法
string[] csvFilePaths = { "path_to_your_file.csv" }; // 替换为实际CSV文件路径
try
{
string[,] data = CSVReader.ReadCSV(csvFilePaths[0]);
// 现在数据存储在data数组中,你可以遍历它了
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
```
阅读全文