簡體   English   中英

C#讀取一個csv文件並傳遞數據

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM