zoukankan      html  css  js  c++  java
  • 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是因为懒,小伙伴们不要效仿哦。

  • 相关阅读:
    C#学习之自定义类实现foreach
    C#学习之用迭代器实现枚举器
    silverlight学习之获取照片的路径
    Java语言基础基本数据类型与运算符
    Java语言基础数组
    Asp.Net 学习资源列表
    测试第一篇BLOG文,高亮代码
    当屌丝想看《蜀山剑侠传》[python屏幕抓取]
    jQuery数据显示插件整合
    腾讯面试题:50个阶梯,你一次可以上一阶或两阶,走上去,共有多少种走法【原】
  • 原文地址:https://www.cnblogs.com/Damos/p/bigText.html
Copyright © 2011-2022 走看看