如何将CSV读入C#类
我有以下课程如何将CSV读入C#类,c#,csv,C#,Csv,我有以下课程 public class Department { public string id { get; set; } public string name { get; set; } } 我有一个csv文件,其中包含ID、名称的列表。我想读取ID,创建url和名称,并创建一个json主体来发布到url。我有以下代码,但我不知道如何将csv行拆分为id和名称 try { //
public class Department
{
public string id { get; set; }
public string name { get; set; }
}
我有一个csv文件,其中包含ID、名称的列表。我想读取ID,创建url和名称,并创建一个json主体来发布到url。我有以下代码,但我不知道如何将csv行拆分为id和名称
try
{
//Open File and Read
var csv = new List<Department>();
var lines = System.IO.File.ReadAllLines(@"C:\file.csv");
foreach (string line in lines)
// Add Code Here
string url = "https://www.test.com/department/" + id;
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Headers.Add("Authorization", "77ba42a2d0511e109068bcb9857d035da27a4eae");
request.Method = "PUT";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Add Code for Json Body
}
}
试试看
{
//打开文件并读取
var csv=新列表();
var lines=System.IO.File.ReadAllLines(@“C:\File.csv”);
foreach(行中的字符串行)
//在这里添加代码
字符串url=”https://www.test.com/department/“+id;
尝试
{
HttpWebRequest请求=(HttpWebRequest)HttpWebRequest.Create(url);
添加(“授权”、“77ba42a2d0511e109068bcb9857d035da27a4eae”);
request.Method=“PUT”;
HttpWebResponse=(HttpWebResponse)request.GetResponse();
//为Json主体添加代码
}
}
我通常不建议使用解析csv
但是,如果这是一个足够简单的csv文件,您可以这样做
var lines = File.ReadAllLines(@"C:\file.csv");
var csv = lines.Select(x =>{
var parts = x.Split(',');
return new Department()
{
id = parts[0].Trim(),
name = parts[1].Trim(),
};
}).ToList();
注意,我不确定这些是否是引号字符串,但如果是,您也可以修剪引号
Dislaimer,最好使用专用的CSV库:)为什么可以引用ISCSV字段并包含逗号和各种诡计
即使使用TextFieldParser,我也遇到了CSV解析问题。您的CSV可能没有嵌入的换行符,但是每当您在某些列中有任意文本的CSV时,您可以在行的中间有新的行。使用ReadAllLines永远不会正常工作 我没有导入一些相当大的库,而是编写了一个函数从CSV流中读取一行。它将每个单元格作为字符串读取,并去掉引号。这可能意味着您无法区分文件中的“2”和“2”,但通常情况下,这是不必要的。但是,它处理引号单元格中的逗号和换行符,这通常会使简单方法出错。它还处理引号内的引号,因此
所以她说“嗨!”
将被正确地解析为一个单元格,就像文本所以她说“嗨!”
}
public void ReadCsvIntoListOfObjects{
变量状态=新列表();
var lines=File.ReadAllLines(“path.csv”).Skip(1);
foreach(行中的var行)
{
var值=行分割(“;”);
var st=新的CurrentAlertStatus();
var props=typeof(CurrentAlertStatus).GetProperties();
对于(int i=0;i
}您应该使用合适的CSV解析器,如Microsoft.VisualBasic.FileIO.TextFieldParser我为另一个答案编写的一个方法。。。我在var csv上面添加了字符串id=null。似乎身份证和姓名都没有填写。它正在读取文件,但id和名称为空。如果我不添加stringid=null,我会在字符串url行的id下得到一条曲线。以下是我的csv的外观。1,HR 2,IT@LauraBejjani更新了演示
private static String[] ReadCSVRow( TextReader csv )
{
int ch;
Boolean bInQuote = false;
StringBuilder builder = new StringBuilder(128);
List<String> columns = new List<String>();
while ((ch = csv.Read()) != -1)
{
if (builder.Length == 0 && !bInQuote)
{
if (ch == '\"')
bInQuote = true;
else if (ch == ',')
{
// add an empty string
columns.Add("");
}
else if (ch == '\n')
{
// return current columns
columns.Add("");
return columns.ToArray();
}
else if (ch != '\r')
{
// start a new column
builder.Append((char)ch);
}
}
else if (bInQuote)
{
// we have started our column with a quote
if (ch == '\"')
{
// peek to see if this is double.
int next = csv.Peek();
if (next == '\"')
{
// read it.
csv.Read();
// add it
builder.Append('\"');
}
else
{
// no longer in quotes. next SHOULD be a comma or end of file.
bInQuote = false;
}
}
else
{
builder.Append((char)ch);
}
}
else
{
if (ch == ',')
{
// add our column and go to next
columns.Add(builder.ToString());
builder.Clear();
}
else if (ch == '\n')
{
// add column and return.
columns.Add(builder.ToString());
builder.Clear();
return columns.ToArray();
}
else if (ch != '\r') // skip line feeds if not in quotes.
{
builder.Append((char)ch);
}
}
}
//
// we hit end of file without a new line. If we have data, return it, otherwise null.
if (builder.Length > 0)
columns.Add(builder.ToString());
if (columns.Count == 0)
return null;
return columns.ToArray();
}
using( TextReader reader = new StreamReader("C:\\file.csv")) {
String[] row;
while( (row = ReadCSVRow(reader)) != null ) {
...
// first column in row[0], 2nd in row[1], etc...
}
}
public class CurrentAlertStatus
{
public string message_type { get; set; }
public string seconds { get; set; }
public string deviceid { get; set; }
public string vin { get; set; }
public string esn { get; set; }
public string iccid { get; set; }
public void ReadCsvIntoListOfObjects{
var statuses = new List<CurrentAlertStatus>();
var lines = File.ReadAllLines("path.csv").Skip(1);
foreach (var line in lines)
{
var values = line.Split(";");
var st = new CurrentAlertStatus();
var props = typeof(CurrentAlertStatus).GetProperties();
for (int i = 0; i < values.Length-1; i++)
{
props[i].SetValue(st, values[i]);
}
statuses.Add(st);
}