簡體   English   中英

使用FileHelpers僅讀取CSV文件的某些列

[英]Reading only certain columns of a csv file with filehelpers

嘗試僅讀取我的csv文件的這些列: Buyer Fullname ,運Ship to Address1 ,運Ship to Address2 ,運Ship to City ,運Ship to State ,運Ship to Zip ,運Ship to CountryItem TitleQuantitySale PriceShipping and Handling

這是我的.CSV文件:

Sales Record Number,User Id,Buyer Fullname,Buyer Phone Number,Buyer Email,Buyer Address 1,Buyer Address 2,Buyer City,Buyer State,Buyer Zip,Buyer Country,Item Number,Item Title,Custom Label,Quantity,Sale Price,Shipping and Handling,US Tax,Insurance,Cash on delivery fee,Total Price,Payment Method,Sale Date,Checkout Date,Paid on Date,Shipped on Date,Feedback left,Feedback received,Notes to yourself,PayPal Transaction ID,Shipping Service,Cash on delivery option,Transaction ID,Order ID,Variation Details,Global Shipping Program,Global Shipping Reference ID,Ship To Address 1,Ship To Address 2,Ship To City,Ship To State,Ship To Zip,Ship To Country

"911","trnkaso","TEDDY ROSCO","(815) 814-7454","trnadfo21@yahoo.com","6300 W Cherry St","","NILES","IL","60454-3406","United States","1115402028","SODIUM HYDROXIDE 50% in a one gallon poly bottle. 4 X 1 GALLON POLY BOTTLES","","2","$25.00","$0.00","$0.00","$0.00","","$100.00","PayPal","Sep-04-15","Sep-04-15","Sep-04-15","","No","","","0FG679030062A","UPS Ground","","1419197650001","","","No","","CHEERY ST","","NILES","IL","60714-3496","United States"
"912","siscokid8","MARK DWAYNE","(408) 943-1485","rasdfdsaay@siscobreakers.com","2050 Dam Ave","","San Jose","CA","95631-2104","United States","111113402518","LACQUER THINNER IN FIVE GALLON METAL PAIL","","1","$50.00","$10.00","$0.00","$0.00","","$153.00","PayPal","Sep-04-15","Sep-04-15","Sep-04-15","","No","","","23432J195640","UPS Ground","","1419241097001","","","No","","205065 Junction Ave","","San DIEGO","CA","95131-2104","United States"
"913","richmeltre","RICHIE FULLBRIGHT","(210) 863-36454","rcdasfasdftrevino@treasdfavino6.com","1323 Rosecolored Dr","","York","PA","17655-9185","United States","110829686817","Potassium Permanganate in a five lb container","","1","$35.00","$35.00","$0.00","$0.00","","$70.00","PayPal","Sep-06-15","Sep-06-15","Sep-06-15","","No","","","641682286830F","UPS Ground","","1419745125001","","","No","","ROSE GLASS DR","","York","PA","17244-9175","United States"

3, record(s) downloaded,from ,Sep-04-15,12:34:03, to ,Sep-06-15,04:10:47
Seller ID: non@non.com

不知道如何跳過我不需要的字段並僅添加我想要的字段。 我想我可以創建虛擬字段以讀取csv文件,然后在之后對這些項目執行刪除,但是有沒有辦法從一開始就不包括它們? 我認為最后兩行也會產生錯誤,我該如何處理? 這只是我的代碼的一點:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using FileHelpers;

    namespace Ebay
    {
        class Program
        {
            static void Main()
            {
                var engine = new FileHelperEngine<Orders>();
                var records = engine.ReadFile("SalesHistory.csv");
            }  
        }
        [DelimitedRecord(",")]
        [IgnoreEmptyLines]
        class Orders
        {
            public string Name { get; set; }
            public string AddressLine1 { get; set; }
            public string AddressLine2 { get; set; }
            public string City { get; set; }
            public string State { get; set; }
            public string Title { get; set; }
            public string ItemPrice { get; set; }
            public string ShippingPrice { get; set; }
            public string Quantity { get; set; }
            public string PostalCode { get; set; }


        }
    }

仍然無法讀取文件,這是我更改代碼的方式:

namespace Ebay
{
    class Program
    {
        static void Main()
        {
            var engine = new FileHelperEngine<Orders>();
            var records = engine.ReadFile("SalesHistory.csv");
        }  
    }
    [DelimitedRecord(",")]
    [IgnoreEmptyLines]
    public class Orders
    {
        [FieldOrder(1)]
        private String DummyField1;

        [FieldOrder(2)]
        private String DummyField2;

        [FieldOrder(3)]
        public string Name { get; set; }

        [FieldOrder(4)]
        private String DummyField4;

        [FieldOrder(5)]
        private String DummyField5;

        [FieldOrder(6)]
        private String DummyField6;

        [FieldOrder(7)]
        private String DummyField7;

        [FieldOrder(8)]
        private String DummyField8;

        [FieldOrder(9)]
        private String DummyField9;

        [FieldOrder(10)]
        private String DummyField10;

        [FieldOrder(11)]
        private String DummyField11;

        [FieldOrder(12)]
        private String DummyField12;

        [FieldOrder(13)]
        public string Title { get; set; }

        [FieldOrder(14)]
        private String DummyField14;

        [FieldOrder(15)]
        public string Quantity { get; set; }

        [FieldOrder(16)]
        public string ItemPrice { get; set; }

        [FieldOrder(17)]
        public string ShippingPrice { get; set; }

       [FieldOrder(18)]
        private String DummyField18;

        [FieldOrder(19)]
        private String DummyField19;

        [FieldOrder(20)]
        private String DummyField20;

        [FieldOrder(21)]
        private String DummyField21;

        [FieldOrder(22)]
        private String DummyField22;

        [FieldOrder(23)]
        private String DummyField23;

        [FieldOrder(24)]
        private String DummyField24;

        [FieldOrder(25)]
        private String DummyField25;

        [FieldOrder(26)]
        private String DummyField26;

        [FieldOrder(27)]
        private String DummyField27;

        [FieldOrder(28)]
        private String DummyField28;

        [FieldOrder(29)]
        private String DummyField29;

        [FieldOrder(30)]
        private String DummyField30;

        [FieldOrder(31)]
        private String DummyField31;

        [FieldOrder(32)]
        private String DummyField32;

        [FieldOrder(33)]
        private String DummyField33;

        [FieldOrder(34)]
        private String DummyField34;

        [FieldOrder(35)]
        private String DummyField35;

        [FieldOrder(36)]
        private String DummyField36;

        [FieldOrder(37)]
        private String DummyField37;

        [FieldOrder(38)]
        public string AddressLine1 { get; set; }

        [FieldOrder(39)]
        public string AddressLine2 { get; set; }

        [FieldOrder(40)]
        public string City { get; set; }

        [FieldOrder(41)]
        public string State { get; set; }

        [FieldOrder(42)]
        public string PostalCode { get; set; }

        [FieldOrder(43)]
        public string Country { get; set; }

    }

我幾乎已經到了,但您還需要添加IgnoreFirst和IgnoreLast屬性。 否則,最后兩三行將導致錯誤,因為它們的布局列不足。

我還沒有使用FileHelpers庫。 沒必要。 這些操作我自己並不難。 我要做的只是1-2-3一樣簡單:

  1. 一次讀取一行;
  2. 分割行並獲得令牌;
  3. 僅獲取必填字段數組中提到的令牌。

這個想法是使必填字段的添加成為Orders類的責任,而不是在Main()中為其編寫邏輯。

在代碼-偽代碼組合中,它將類似於以下內容:

在主要方法中

public static void Main ()
{
    //Check the file path and other validations etc..

    using (var fileReader = new System.IO.StreamReader(@"C:\your\filepath\here"))
    {
        string line;
        while ((line = fileReader.ReadLine()) != null)
        {
            var tokens = line.Split(',');
            if (tokens.Length != ExpectedLength) continue; //this will filter the non-matching cases, including the last two lines
            myOrders.AddRequiredFields(tokens);
        }
    }
}

在訂單類中

Orders類需要具有僅從每一行具有的所有標記中讀取所需標記的方法。 這將是:

//The properties like Name, Title, Quantity are already defined in this class

//Need to define an enum. Good programming practice

enum OrderFieldNumbers
{
    Buyer_Fullname = 0,
    Ship_to_Address1,
    Ship_to_Address2,
    ...,
    Name,
    ...,
    Title,
    ...  //Until all the fields are mentioned
};

public void AddRequiedFields(string[] tokens)
{
    //Simply add the ONLY THOSE FIELDS that you want to read.
    Name = tokens[OrderFieldNumbers.Name];
    Title = tokens[OrderFieldNumbers.Title];
    .
    .
    .
}

每次您要閱讀特定字段時, AddRequiredFields根據需要修改AddRequiredFields 您應該已經在OrderFieldNumbers屬性中枚舉了csv文件的所有字段。 因此,您無需記住每個字段的位置。 您只需將名稱命名為OrderFieldNumbers.myNeededColumnNumber獲得。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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