[英]C# reading a csv file and passing the data
我正在开发一个将在AD中创建用户的应用程序。 现在,我可以一次创建一个用户。 现在,我正在尝试通过CSV
文件批量创建用户。
经过一些研究,看起来就像使用Microsoft.VisualBasic.FileIO;
而TextFieldParser
是执行此操作的最简单方法。
CSV文件头的方式如下:
FFirstName,LastName,Description,Password,OU,Group
这是我到目前为止的内容:
私人无效CreateUsers_Click(对象发送者,EventArgs e){
using ( TextFieldParser csvReader = new TextFieldParser ( userscsv ) )
{
csvReader.TrimWhiteSpace = true;
csvReader.TextFieldType = FieldType.Delimited;
// csvReader.SetDelimiters ( new string [] { "," } );
csvReader.SetDelimiters ( "," );
// reading column fields
string [] colFields = csvReader.ReadFields ( );
int index_FirstName = colFields.ToList ( ).IndexOf ( "FirstName" );
while ( !csvReader.EndOfData )
{
// reading user fields
string [] fieldData = csvReader.ReadFields ( );
AD_Add_User_to_Group.Biz.AdAcctManagement bt = new Biz.AdAcctManagement ( );
try
{
bt.CreateUser ( this.oulist.Text, this.txtDisplayName.Text, this.txtPassword.Text, this.txtFirstName.Text, this.txtLastName.Text );
}
catch ( Exception ex )
{
}
}
}
}
如何从CSV读取值并将其传递给我的方法:
bt.CreateUser ( this.oulist.Text, this.txtDisplayName.Text, this.txtPassword.Text, this.txtFirstName.Text, this.txtLastName.Text );
而不是this.txtFirtName.Text,我想传递CSV文件中的名字。
让我假设CSV文件的格式为:
someValue,DisplayName,Password,FirstName,LastName
如果是这样,您可以使用以下代码完全满足要求:
foreach (string csvLines in File.ReadAllLines("Path here"))
{
//Here csvItem is each Line in the CSV file
string[] csvItems = csvLines.Split(',').ToArray();
bt.CreateUser(csvItems[0], csvItems[1], csvItems[2], csvItems[3], csvItems[4]);
}
另一种更简单的方法是使用CsvHelper。 您可以从NuGet安装它,它非常易于使用和灵活。 我开始使用CsvHelper,因为它在读取数据时支持类型转换,并且还具有许多其他有用的功能。 下面是您的方案的示例代码。 您可以在磁盘上提供CSV文件的路径。 在大多数情况下,我更喜欢使用嵌入式资源。 该代码未编译,但足以给您思想,
var assembly = Assembly.GetExecutingAssembly();
var resourceName = "<ProjectName>.<FolderName>.UsersList.csv";
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
{
using (StreamReader reader = new StreamReader(stream))
{
var csv = new CsvReader(reader);
csv.Configuration.Delimiter = ",";
csv.Configuration.HasHeaderRecord = true;
csv.Configuration.IgnoreHeaderWhiteSpace = true;
csv.Configuration.IgnoreQuotes = false;
csv.Configuration.IsHeaderCaseSensitive = false;
csv.Configuration.ThrowOnBadData = true;
csv.Configuration.QuoteAllFields = true;
csv.Configuration.RegisterClassMap<UsersClassMap>();
csv.Configuration.IgnoreReadingExceptions = true;
csv.Configuration.SkipEmptyRecords = false;
List<User> records = csv.GetRecords<User>().ToList();
foreach (User user in records)
{
bt.Create(user.FFirstName, user.lastName, user.Description, user.Password, user.OU, user.Group);
}
}
}
public class User
{
public string FFirstName { get; set; }
public string LastName { get; set; }
public string Description { get; set; }
public string Password { get; set; }
public string OU { get; set; }
public string Group { get; set; }
}
public class UsersClassMap : CsvClassMap<User>
{
public UsersClassMap()
{
Map(x => x.FFirstName).Index(0).Name("FFirstName");
Map(x => x.LastName).Index(1).Name("LastName");
Map(x => x.Description).Index(2).Name("Description");
Map(x => x.Password).Index(3).Name("Password");
Map(x => x.OU).Index(4).Name("OU");
Map(x => x.Group).Index(5).Name("Group");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.