我是C#的新手。我需要从CSV文件中读取所有列。 在我的CSV文件中,我有:日期,test1(在test1下有一些随机数据),下限(来自test1数据的最低编号,该数字在下限的所有行中均被复制。最后一列是上限(来自test1数据的最高编号) )。
这是为了计算过程能力。
我发现以下代码仅读取第一列。 但是我需要阅读所有专栏文章
public static DataTable OpenCSV(string filePath)
{
DataTable dt = new DataTable();
FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);
StreamReader sr = new StreamReader(fs);
string strLine = "";
string[] aryLine = null;
string[] tableHead = null;
int columnCount = 0;
bool IsFirst = true;
while ((strLine = sr.ReadLine()) != null)
{
if (IsFirst == true)
{
tableHead = strLine.Split(',');
IsFirst = false;
columnCount = tableHead.Length;
for (int i = 0; i < columnCount; i++)
{
DataColumn dc = new DataColumn(tableHead[i]);
dt.Columns.Add(dc);
}
}
else
{
aryLine = strLine.Split(',');
DataRow dr = dt.NewRow();
for (int j = 0; j < columnCount; j++)
{
dr[j] = aryLine[j];
}
dt.Rows.Add(dr);
}
}
if (aryLine != null && aryLine.Length > 0)
{
dt.DefaultView.Sort = tableHead[0] + " " + "asc";
}
sr.Close();
fs.Close();
return dt;
}
DataTable dt;
public int Val1 { get; private set; }
public int Val2 { get; private set; }
public int Cp { get; private set; }
private void btOK_Click(object sender, EventArgs e)
{
dt = OpenCSV(textBox1.Text);
foreach (DataRow dr in dt.Rows)
{
// Get the first column
checkedListBox1.Items.Add(dr["Date"]);
}
我希望在读取文件上的所有列后进行一些计算
答案 0 :(得分:0)
在foreach(dt.Rows中的DataRow dr)中,您的dr具有所有列。您可以通过在索引器中输入其他列名称来访问值。例如dr [“ test1”],dr [“ lowerlimit”],dr [“ higherlimit”]等
答案 1 :(得分:0)
这是读取csv文件的另一种方式:
List<string> lstDates = new List<string>();
List<string> lstTest = new List<string>();
string[] rows = File.ReadAllLines(filePath);
foreach(string r in rows)
{
string[] cols = r.split(',');
lstDates.Add(cols[0]);
lstTest.add(cols[1]);
//you can add other columns to lists
}
//if you need the lists to be arrays you can convert them
string[] arrDates = lstDates.ToArray();