C#讀取大文本文件


  今天偶遇一同事抱怨,sqlserver導出的CSV,明明有1000W條,但用excel打開就只剩100W了,足足消失了90%,所以她懷疑文件是足量的1000W條,是excel搗了鬼。可是文件容量有2G+,用記事本打不開,如何證明CSV文件沒有缺少數據,這可難壞了他。

  好吧,本着不看其他輪子,有問題自己造一個的原則,我決定用控制台程序寫一個簡易讀取程序,具體CODE如下:

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

namespace BigTextReader
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = "";
            do
            {
                Console.WriteLine("Please input the file path:");
                path = Console.ReadLine();
            }
            while (!System.IO.File.Exists(path));
            var fileStream = System.IO.File.OpenRead(path);
            while(true)
            {
                Console.WriteLine("Please input the start position:");
                var position = Int64.Parse(Console.ReadLine());
                if (position == -1)
                {
                    Console.WriteLine("finish");
                    return;
                }
                fileStream.Position = position;
                var byts = new Byte[1000];
                fileStream.Read(byts, 0, 1000);
                var str = Encoding.UTF8.GetString(byts);
                Console.WriteLine(str);
            }

        }
    }
}

好了,程序如上圖所示,第一步,輸入文件的絕對地址,比如d:\a.csv,第二步,輸入文本的位置,比如100000,程序默認讀取1000個字節作展示。當位置輸入為-1時,程序退出。

一個基本的大文本讀取器就初見雛形了,用每個ROW的byte數*200W,果然讀出了數據,完美的證明了同事的猜想,同時,讀取的時間只用了100ms。

 

PS:個人感覺,Encoding,讀取的byte數可以寫作配置,但會拖長操作流程,同時,直接Int64.Parse是因為懶,小伙伴們不要效仿哦。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM