我有一个带有逗号分隔值的平面文件,需要传输到数据表,第一行的值是标题名称,将用作数据表的列名。但在此之前,我需要检查平面文件中是否有所有必需的标题(一些强制标题)。请帮我开发一个C#代码来进行标题验证。
`.
.
.
/getting full file path of Uploaded file and read all text
System.IO.StreamReader file = new System.IO.StreamReader(@path);
string line;
while ((line = file.ReadLine()) != null)
{
string[] linetemp = line.Split(new char[] { ',' });
if(tblcsv.Rows.Count==0)
{
foreach (string ColName in linetemp)
{
tblcsv.Columns.Add(ColName); //Creating columns with available headers names
}
}
tblcsv.Rows.Add();
.
.
.
`//remaining code
例如 如果平面文件将包含 日期时间,状态,受让人,记者,持续时间中,col1,col2的,备注 1504451523568,INPROGRESS,ABC,BCD,120,真,B,评论... 1504451523567,建成后,东风集团,BCD,120,真,B,评论... 1504451523566,未分配,VNB,BCD,160,,B,评论... 1504451523565,INPROGRESS,ERT,FGH,150,真,,评论... 我需要检查只有第一行有所有mandaory标题(如datetime,Status,Assignee和Duration)。
答案 0 :(得分:0)
我建议使用CsvHelpet库来解析CSV文件。它允许定义表示文件中一行的类。标题名称默认为属性名称,或者可以映射usimg fluent API。
var csv = new CsvReader(textReader); var records = csv.GetRecords();
如果缺少某些标题,获取记录将会失败。
答案 1 :(得分:0)
我厌倦了使用来自在线的示例Csv文件来实现您的特定要求。可以找到Csv文件here,我可能没有复杂的代码,但尝试采用最简单的方法来解决这个特定的问题。
下面是您重要的代码的简短版本。
String firstLine;
var fileStream = new FileStream( @ "C:\Users\user\Desktop\AssetsImportCompleteSample.csv", FileMode.Open,
FileAccess.Read);
using(var streamReader = new StreamReader(fileStream, Encoding.UTF8)) {
firstLine = streamReader.ReadLine();
}
var values = firstLine.Split(',');
for (int i = 0; i < values.Length; i++) {
values[i] = values[i].Trim();
}
if (values.Length == 4)
{
int count=0;
IList<string> newList = new List<string> { "MXASSETInterface", "SRM_SaaS_ES", "EN", "AddChange" };
for (int i = 0; i < values.Length; i++)
{
if (newList.Contains(values[i]))
{
count++;
newList.Remove(values[i]);
}
}
if (count == 4)
{
Console.WriteLine("head is correct");
}
else
{
Console.WriteLine("head is incorrect");
}
}
可以使用以下代码找到完整的控制台应用程序,可以直接运行
class Program
{
static void Main(string[] args)
{
try
{
String firstLine;
var fileStream = new FileStream(@"C:\Users\user\Desktop\AssetsImportCompleteSample.csv", FileMode.Open,
FileAccess.Read);
using (var streamReader = new StreamReader(fileStream, Encoding.UTF8))
{
firstLine = streamReader.ReadLine();
}
if (firstLine != null)
{
var values = firstLine.Split(',');
Console.WriteLine(firstLine);
for (int i = 0; i < values.Length; i++)
{
values[i] = values[i].Trim();
Console.WriteLine(values[i]);
}
if (values.Length == 4)
{
int count=0;
IList<string> newList = new List<string> { "MXASSETInterface", "SRM_SaaS_ES", "EN", "AddChange" };
for (int i = 0; i < values.Length; i++)
{
if (newList.Contains(values[i]))
{
count++;
newList.Remove(values[i]);
}
}
if (count == 4)
{
Console.WriteLine("head is correct");
}
else
{
Console.WriteLine("head is incorrect");
}
}
else
{
Console.WriteLine("header is Invalid");
}
}
else
{
Console.WriteLine("header is Invalid");
}
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine("Please check if file is available or path is correct", e.Message);
}
Console.ReadLine();
}
}