2017-10-01 8 views
0

이것은 지금까지 작성한 코드입니다 ... 동일한 파일의 모든 행을 다시 쓰는 것을 제외하고는 작업을 수행하지 않습니다. 다시 ... C# load txt 파일을로드하고 줄 수에 따라 X 파일로 나눕니다.

* RecordCntPerFile = 10K

* FileNumberName = 1 (파일 번호 하나)

은 * 전체 파일 이름은 다음과 같이해야한다 : 1_asci_split

string FileFullPath = DestinationFolder + "\\" + FileNumberName + FileNamePart + FileExtension; 
using (System.IO.StreamReader sr = new System.IO.StreamReader(SourceFolder +  "\\" + SourceFileName)) 
{ 
for (int i = 0; i <= (RecordCntPerFile - 1); i++) 
{ 
using (StreamWriter sw = new StreamWriter(FileFullPath)) 
{ 
{ sw.Write(sr.Read() + "\n"); } 

    } 
} 
FileNumberName++; 
    } 
Dts.TaskResult = (int)ScriptResults.Success; 
} 
+0

입니다. 따라서 count = 10K이면 기존 파일에서 10K 개의 새 파일을 만들고 싶습니까? 모든 파일에는 몇 줄이 있어야합니까? 단일 파일에 10K 회선이 없으면 어떻게해야합니까? –

답변

0

제대로 이해했다면 큰 파일을 최대 10k 줄의 작은 파일로 분할하고 싶습니다. 귀하의 코드에 2 가지 문제가 있습니다.

  • FullFilePath 변수를 절대 변경하지 마십시오. 따라서 항상 같은 파일에서 다시 작성합니다.

  • 항상 전체 소스 파일을 읽고 대상 파일에 씁니다.

앞서 언급 한 동작에 맞게 코드를 다시 작성했습니다. 문자열을 수정하면됩니다.

int maxRecordsPerFile = 10000; 
int currentFile = 1; 
using (StreamReader sr = new StreamReader("source.txt")) 
{ 
    int currentLineCount = 0; 
    List<string> content = new List<string>(); 
    while (!sr.EndOfStream) 
    { 
     content.Add(sr.ReadLine()); 
     if (++currentLineCount == maxRecordsPerFile || sr.EndOfStream) 
     { 
      using (StreamWriter sw = new StreamWriter(string.Format("file{0}.txt", currentFile))) 
      { 
       foreach (var line in content) 
        sw.WriteLine(line); 
      } 
      content = new List<string>(); 
      currentFile++; 
      currentLineCount = 0; 
     } 
    } 
} 

물론 문자열을 만들고 foreach 루프를 수행 할 필요가 없으므로 이보다 잘 할 수 있습니다. 이 간단한 예제를 통해 아이디어를 얻었습니다. 성능을 향상 시키려면

+0

일했습니다! 고마워! –

+0

왼쪽에있는 녹색 눈금을 확인하여 답을 수락 할 수 있습니다. – romerotg

+0

확인 :) 다시 감사드립니다. –