• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C#读取大文本文件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  今天偶遇一同事抱怨,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是因为懒,小伙伴们不要效仿哦。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#Thread.Sleep不精准的问题以及解决方案发布时间:2022-07-10
下一篇:
C#DataGridView删除指定行发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap