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是因为懒,小伙伴们不要效仿哦。

时间: 2024-11-04 15:51:35

C#读取大文本文件的相关文章

读取大文本文件

目录 大容量文件读写并统计 #思路 io流的初始化 Treemap的建立和读取起点 判断是否为出现最多 结果 参考 大容量文件读写并统计 https://www.cnblogs.com/outmanx/p/9694493.html 在这个项目的基础上,我稍作了修改,并能让程序进行低占存的大文本文件读写,并统计出行数和出现最多的字符串 #思路 参考https://www.cnblogs.com/zhujiabin/p/5660541.html的思路,通过RandomAccessfile的类方法进行

java读取大文本文件

原文:http://blog.csdn.net/k21325/article/details/53886160 小文件当然可以直接读取所有,然后放到内存中,但是当文件很大的时候,这个方法就行不通了,内存不是这么玩的~~ 那么,下面是解决方法: 1.Java底层:调用java的java.util.Scanner类扫描文件内容,一行一行,连续读取 FileInputStream inputStream = null; Scanner sc = null; try { inputStream = ne

集算器并行处理大文本文件的示例

集算器可以方便地用并行方式处理大文本文件,下面通过一个例子来说明使用方法. 假设有个一千万条销售记录的文本文件sales.txt,其主要字段是SellerID(销售员).OrderDate(订单日期).Amount(订单金额),请计算每个销售员在近四年里的大订单总金额.其中,金额在2000以上的属于大订单. 要进行并行处理,首先要能对文件进行分段,集算器提供了游标数据对象cursor及其函数,可以方便地分段读取大文本文件.比如file("e:/sales.txt")[email pro

Java读写大文本文件(2GB以上)

如下的程序,将一个行数为fileLines的文本文件平均分为splitNum个小文本文件,其中换行符'r'是linux上的,windows的java换行符是'\r\n': package kddcup2012.task2.FileSystem; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import 

Java多线程读取大文件

前言 今天是五一假期第一天,按理应该是快乐玩耍的日子,但是作为一个北漂到京师的开发人员,实在难想出去那玩耍.好玩的地方比较远,近处又感觉没意思.于是乎,闲着写篇文章,总结下昨天写的程序吧. 昨天下午朋友跟我聊起,他说有个需求,需要把上G的txt文件读取写入到数据库.用普通的io结果自然是OOM了,所以果断用NIO技术.为了提高速度,自然还得用上多线程技术. 接下来就介绍一下实现思路以及相关的知识点. 内容 一.对文件分区 为了充分利用多线程读取,就需要把文件划分成多个区域,供每个线程读取.那么就

R实现大文本文件数据分组汇总的方法

使用R语言对文件数据分组汇总是很普遍的操作,但有时我们会遇到比较大的文件,这类文件的计算结果较小,但源数据太大,无法全部放入内存进行计算,只能采用分批读取.分批计算.拼合结果的办法来解决.下面用一个例子来说明R实现大文件数据分组汇总的方法. 有个1G的文件sales.txt,存储着大量订单记录,我们要对CLIENT字段分组并对AMOUNT字段汇总.该文件的列分割符为"\t",前几行数据如下: R语言解决方案     con <- file("E: \\sales.txt

c#分页读取GB文本文件实例

本文实例讲述了c#分页读取GB文本文件的方法.分享给大家供大家参考.具体如下: 一.应用场景: ① .我在做BI开发测试的时候,有可能面对source文件数GB的情况,如果使用一般的文本编辑器,则会卡死,或要等很久才能显示出来. ② .有时候,我们使用ascii(01)或ascii(02)作为行或列的分隔符,这样的临时文件用于导数据到DB,如果文件导入过程中有错误,需要查看文件 的时候,普通的编辑器不支持换行,则会很恐怖. 为解决这两个需求,我使用c#完成了一个简单的winform的应用程序.

(整理二)读取大日志文件

一般读取文件有三种方式: 1.读取到内存中: 2.分块读取: 3.采用内存映射技术. 一.读取到内存中 此种方式比较适合小文件,可以通过文件流的方式直接读取到内存中进行处理. 二.分块读取 当文件很大时(特别是文件大小大于内存大小),读取到内存中就很不合理.这种时候,我们可以将文件进行分块,然后进行分块读取. 1 /// <summary> 2 /// 读取大文件方法 3 /// </summary> 4 /// <param name="initialPath&q

php使用file函数、fseek函数读取大文件效率分析

php读取大文件可以使用file函数和fseek函数,但是二者之间效率可能存在差异,本文章向大家介绍php file函数与fseek函数实现大文件读取效率对比分析,需要的朋友可以参考一下. 1. 直接采用file函数来操作 由于 file函数是一次性将所有内容读入内存,而PHP为了防止一些写的比较糟糕的程序占用太多的内存而导致系统内存不足,使服务器出现宕机,所以默认情况下限制只能最大使用内存16M,这是通过php.ini里的 memory_limit = 16M 来进行设置,这个值如果设置-1,