一千萬個為什麽

搜索

使用動態列數解析大分隔文件


在解析文件之前,當列未知時解析分隔文件的最佳方法是什麽?

文件格式為Rightmove v3(.blm),結構如下:

#HEADER#
Version : 3
EOF : '^'
EOR : '~'
#DEFINITION#
AGENT_REF^ADDRESS_1^POSTCODE1^MEDIA_IMAGE_00~//can be any number of columns
#DATA#
agent1^the address^the postcode^an image~
agent2^the address^the postcode^^~     //the records have to have the same number of columns as specified in the definition, however they can be empty
etc
#END#

文件可能非常大,我的示例文件是40Mb,但它們可能是幾百兆字節。下面是在我意識到列是動態的之前我已經開始的代碼,我正在打開一個文件流,因為我讀到這是處理大文件的最佳方法。我不確定我的想法是將每條記錄放在列表中然後處理是好的,但不知道這是否適用於這麽大的文件。

List recordList = new List();

try
{
    using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
    {
        StreamReader file = new StreamReader(fs);
        string line;
        while ((line = file.ReadLine()) != null)
        {
            string[] records = line.Split('~');

            foreach (string item in records)
            {
                if (item != String.Empty)
                {
                    recordList.Add(item);
                }
            }

        }
    }
}
catch (FileNotFoundException ex)
{
    Console.WriteLine(ex.Message);
}

foreach (string r in recordList)
{
    Property property = new Property();

    string[] fields = r.Split('^');

   //can't do this as I don't know which field is the post code
    property.PostCode = fields[2];
   //etc

    propertyList.Add(property);
}

有關如何更好地做到這一點的任何想法?它是C#3.0和.Net 3.5如果有幫助的話。

謝謝,

Annelie

最佳答案

如果您可以在開始時刪除一些行(標題內容和#xxx#行),那麽它只是一個帶有 ^ 作為分隔符的csv文件,因此任何 CSV閱讀器類將起到作用。

轉載註明原文: 使用動態列數解析大分隔文件

猜你喜歡