상세 컨텐츠

본문 제목

대용량 txt 파일 짜르기

C#

by 탑~! 2018. 6. 29. 15:23

본문


대용량 txt 파일 편집 에디터를 못찾으셨거나 대용량 txt 파일을 짜르거나 추출해 할 경우 ]



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            int counter = 0;
            int fileCounter = 0;
            string readLine, writeLine;
           
            // 파라메터가 있는 지 확인 : 파라메터는 읽어들일 '파일경로\파일명.확장자' 임.
            if (args.Length < 1)
            {
                System.Console.WriteLine("needs file name for reading.");
                return;
            }
 
            string readFileName = @args[0]; 
            System.Console.WriteLine("read file : " + readFileName);
 
            string[] temp;
            System.IO.StreamReader readFile = new System.IO.StreamReader(readFileName);
 
            // 편집 후 저장될 파일명 초기화
            string writeFileName = readFileName + fileCounter;
             
            // 수신 이메일을 읽을 경우 리스트에 저장
            // 중복처리를 위함.
            List<string> writedEmailList = new List<string>();
                        
            int index = -1;
            string saveEmail = "";
            string[] temp2;
 
            // 파일 끝까지 라인단위로 Read.
            while ((readLine = readFile.ReadLine()) != null)
            {
                // 읽어들인 라인을 구분자(',') 로 쪼갬
                temp = readLine.Split(',');
 
                // 쪼갠 각 항목이 따옴표("")로 싸여있음. 따옴표를 삭제
                saveEmail = temp[2].Replace('"',' ').Trim();
               
                // 수신된 이메일이 이전에 수신한 적이 있는지 search
                index = writedEmailList.BinarySearch(saveEmail);
 
                if (index < 0)
                {
                    // write 할 라인을 저장
                    writeLine = saveEmail + "\r\n";
                     
                    // 50000줄을 write 하면 새롭게 파일을 만듦.
                    if (counter % 50000 == 0)
                    {
                        counter = 0;
                        writeFileName = readFileName + fileCounter;
                        System.IO.File.WriteAllText(writeFileName, writeLine);
                        writedEmailList.Insert(~index, saveEmail);
 
                        System.Console.WriteLine("Create file : " + writeFileName);
                        System.Console.WriteLine("=======================================================");
 
                        counter++;
                        fileCounter++;
                    }
                    else
                    {
                        System.IO.File.AppendAllText(writeFileName, writeLine);
                        writedEmailList.Insert(~index, saveEmail);
                        counter++;
                    }
                        System.Console.Write(writeLine);
                }
            }
          
 
            readFile.Close();
            System.Console.WriteLine("End read file!!! press enter key!!");
            System.Console.ReadLine(); 
        }
    }
}


'C#' 카테고리의 다른 글

yield  (0) 2018.06.29
FileStream 비동기 입출력  (0) 2018.06.29
ENCODING / BITCONVERTER  (0) 2018.06.29
BinaryFormatter / XmlSerializer / DataContractJsonSerializer  (0) 2018.06.29
EVENTWAITHANDLE  (0) 2018.06.29

관련글 더보기