2010-07-27 5 views
0

10 개 이상의 행을 가진 파일이 있습니다. 나는 동등한 숫자 나 행을 포함하는 9 개의 파일을 만들고 싶습니다. 10 번째 파일에는 동등한 번호와 나머지를 포함합니다.데이터를 분할하여 하나의 파일을 10 개로 변환하십시오.

저는 현재에 따라 주요 파일의 데이터를 얻을 :

Dim sData As String 

Using sr As New StreamReader(vsFilePath) 
    sData = sr.ReadToEnd 
End Using 

Dim oDataList As New List(Of String) 
oDataList.AddRange(sData.Split(Convert.ToChar(ControlChars.Lf))) 

어떻게 oDataList 소요 시간 및 10 개 파일로 그것을 구문 분석 할 수있는 라인으로 라인을 작성하는 각 파일 및 oDataList을 통해 루프를하지 않고?

내가 현재하고있는 더 나은 방법이 있습니까?

+0

리틀 참고 :'ControlChars.Lf'는'Char'이며,'Char'에는 변환을 필요로하지 않는다 ... – Abel

답변

1

줄의 순서가 중요하지 않은 경우 다음을 수행하여 내용을 10 등분으로 분리 할 수 ​​있습니다. 그렇지 않으면 데이터를 두 번 반복합니다 (한 줄을 계산하고 저장하는 데 사용하고 다른 줄을 기록하는 데 사용합니다).)가 필요할 것입니다.

Dim sData As String 
Dim counter As Integer 
Dim sw(10) As StreamWriter 
For i As Integer = 0 To 9 Step 1 
    sw(i) = New StreamWriter("path" + something) 
Next 

Using sr As New StreamReader("path") 
    sData = sr.ReadLine() 
    While sData IsNot Nothing 
     sw(1 Mod counter).WriteLine(sData) 
     counter += 1 
     sData = sr.ReadLine 
    End While 
End Using 

'add a finally block for closing the 10 streams 
+0

이 밝혀 순서가 중요합니다. 나는 당신의 모델을 가져 와서 같은 순서로 수정했다. 감사. –

0
  • 는 10 개 출력 파일을 엽니 다. 일을 입력 파일의 모든 라인을 통해
  • 으로 반복 다음
    • 분할까지 라인의 행 요소, 다음, 모든 조각을 위해 적절하게
    • 을 슬라이스 해당 파일
  • 에 기록

바이올렛. 한 번만 oDataList를 반복하면됩니다.

+0

행과 선이 같지 않습니까? – Abel

1

원본 파일의 줄 수가 비교적 적은 경우 코드 줄로 배열 전체를 읽을 수 있습니다. 거기에서 10 개의 출력 파일을 생성하는 것은 간단한 작업입니다. 그런 방법이 있습니다.

Dim path As String = "C:\Temp\test\input.txt" 
Dim outputPath As String = "C:\Temp\test\output{0}.txt" 

Dim lines As String() = File.ReadAllLines(path) 

Dim files As Integer = 10 
Dim linesPerFile As Integer = lines.Length \ 10 
Dim currentLine As Integer = 0 

For i As Integer = 0 To files - 1 
    Dim iterations As Integer = linesPerFile 
    If i = files - 1 Then 
     iterations = lines.Length - currentLine 
    End If 

    Using writer As New StreamWriter(String.Format(outputPath, i)) 
     For j As Integer = 0 To iterations - 1 
      writer.WriteLine(lines(currentLine)) 
      currentLine += 1 
     Next 
    End Using 
Next 

...

string path = @"C:\Temp\test\input.txt"; 
string outputPath = @"C:\Temp\test\output{0}.txt"; 

string[] lines = File.ReadAllLines(path); 

int files = 10; 
int linesPerFile = lines.Length/10; 
int currentLine = 0; 

for (int i = 0; i < files; ++i) 
{ 
    int iterations = linesPerFile; 
    if (i == files - 1) 
    { 
     iterations = lines.Length - currentLine; 
    } 

    using (StreamWriter writer = new StreamWriter(string.Format(outputPath, i))) 
    { 
     for (int j = 0; j < iterations; j++) 
     { 
      writer.WriteLine(lines[currentLine++]); 
     } 
    } 
} 
관련 문제