[英]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.