【发布时间】:2015-02-07 08:03:31
【问题描述】:
我是 C# 的学习者。我想从 CSV 文件中读取特定值。我已经学会了通过浏览将 csv 文件放入数据表中。请查看以下代码(感谢 Surendra jha)和我的 CSV 文件格式。比如说,我想得到 'ID' = 90 的 'Volume' 是多少。
CSV 文件
ID:Volume:Name
100:5600:A
95:5000:B
90:4500:C
85:4000:D
获取所有值的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Data;
namespace DVHConsolePrj
{
class Program
{
static void Main(string[] args)
{
readCsvFileData();
}
static void readCsvFileData()
{
string path = @"C:\IDVolumeName.txt";
StreamReader streamreader = new StreamReader(path);
DataTable datatable = new DataTable();
int rowcount = 0;
string[] columnname = null;
string[] streamdatavalue = null;
while (!streamreader.EndOfStream)
{
string streamrowdata = streamreader.ReadLine().Trim();
if (streamrowdata.Length > 0)
{
streamdatavalue = streamrowdata.Split(':');
if (rowcount == 0)
{
rowcount = 1;
columnname = streamdatavalue;
foreach (string csvheader in columnname)
{
DataColumn datacolumn = new DataColumn(csvheader.ToUpper(), typeof(string));
datacolumn.DefaultValue = string.Empty;
datatable.Columns.Add(datacolumn);
}
}
else
{
DataRow datarow = datatable.NewRow();
for (int i = 0; i < columnname.Length; i++)
{
datarow[columnname[i]] = streamdatavalue[i] == null ? string.Empty : streamdatavalue[i].ToString();
}
datatable.Rows.Add(datarow);
}
}
}
streamreader.Close();
streamreader.Dispose();
foreach (DataRow dr in datatable.Rows)
{
string rowvalues = string.Empty;
foreach (string csvcolumns in columnname)
{
rowvalues += csvcolumns + "=" + dr[csvcolumns].ToString() + " ";
}
Console.WriteLine(rowvalues);
}
Console.ReadLine();
}
}
}
【问题讨论】:
-
在 google 中搜索如何使用 C# 读取 csv 文件。这里有一个例子! stackoverflow.com/questions/5282999/…。无论如何,我强烈建议您使用 OleDbConnection !
-
可以使用DataTable.Select的方法进行过滤
-
我以前从未见过带有
:分隔符的csv 文件。我认为CSV代表逗号分隔值。 -
感谢您的帮助......
-
但是,我有一个小问题......使用下面的代码,我可以检索到 95 到 85 但不是 100?我很困惑。这是替换 'foreach (DataRow..' string myID; Console.Write("Enter ID:"); myID = Console.ReadLine(); var filtered = datatable.Select(String.Format("ID = { 0}", myID)); if (filtered.Length > 0) { var Volume1 = filters[0]["VOLUME"]; Console.WriteLine("Volume is :{0}",Volume1); } Console.ReadLine ();