2012-06-15 3 views
1

원본을 읽고 결과를 쓰지 않고 CSV 파일을 편집하는 방법을 알고 싶습니다 (물론 가장 좋은 방법을 알고 싶습니다). 새로운 것.VB.Net CSV (또는 구분 된 파일) 편집

예 1 : 나는 123ABC (123)에 두 개의 컬럼에 컬럼의 내용을 분할 할 ABC

예 2 : 나는 123

해명에 열 AB123의 시작에서 문자를 제거하려면 : 예를 해결하는 데 도움이 필요하지 않습니다. 나는 단지 같은 파일을 읽고 편집하는 올바른 방향을 지적 할 필요가있다.

다음 날 것으로 보인다 임시 파일을 사용하는 코드 예제에서는 새 파일을 작성 오프

Dim currentLine as string() 
tempFile.AutoFlush = True 

Do Until origFile.EndOfData 
    currentLine = origFile.ReadFields 
    currentLine(1) = currentLine(1).Replace("ABC","") 'would convert ABC123 to 123 
    For index as Integer = 0 to currentLine.Count - 2 
     tempFile.Write(currentLine(index) & ",") 
    Next 
     tempFile.Write(currentLine(currentLine.Count - 1)) 
     tempFile.WriteLine() 
Loop 

tempFile.Flush() 
tempFile.Dispose() 
origFile.Dispose() 
IO.File.Copy(tempFile,OrigFile,True) 
IO.File.Delete(tempFile) 

답변

4

당신은 정말 최선 너무 느린이다. 임시 파일에 기록하고 이전 파일을 삭제 한 다음 새 파일의 이름을 이전 파일로 바꿀 수 있습니다. 같은

뭔가 :

Imports System.IO 

Module Module1 

    Sub Main() 
     Dim tempfile = Path.GetTempFileName() 
     Dim inputFile = "C:\Temp\input.txt" 

     Using sw = New StreamWriter(tempfile) 
      Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(inputFile) 
       MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited 
       MyReader.Delimiters = New String() {","} 
       Dim currentRow As String() 
       While Not MyReader.EndOfData 
        Try 
         currentRow = MyReader.ReadFields() 
         If currentRow.Count >= 2 Then 
          currentRow(1) = currentRow(1).Replace("ABC", "") 
         End If 
         sw.WriteLine(String.Join(",", currentRow)) 
        Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException 
         MsgBox("Line " & ex.Message & " is invalid. Skipping") 
        End Try 
       End While 
      End Using 
     End Using 

     File.Delete(inputFile) 
     File.Move(tempfile, inputFile) 

    End Sub 

End Module 

(기본적으로 http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.readfields.aspx에서 TextFieldParser 예를 복사)

+1

교대 그는 메모리로 이전 파일을 읽을 수 있습니다 밖으로 다시 쓰기 : 파일을 저장

For Each row As String In File.ReadAllLines("C:\test.csv") For Each column As String In row.Split(New String() {","}, StringSplitOptions.None) ' Do work Next Next 

그리고이 같은 무언가 : 그것은 단지 훨씬 적은 코드 오버 헤드입니다 같은 파일 – briddums

+0

중간 임시 파일을 사용하면 문제가 발생해도 데이터가 손실되지 않는다는 장점이 있습니다. 또한 파일이 너무 커서 메모리에 저장할 수없는 경우 처리를 위해 파일을 한 줄씩 읽을 수 있습니다. –

+0

감사합니다. 임시 파일을 사용하는 것이 너무 느립니다. 코드 예제 : tempFile.AutoFlush = 진정한 문자열로 희미한 currentLine() 수행 origFile.EndOfData까지 \t currentLine = origFile.ReadFields \t currentLine (1) = currentLine (1) .Replace ("ABC", "") 'currentLine.Count 정수 = 0으로 인덱스 123 \t ABC123로 변환 것 - 2 \t \t tempFile.Write (currentLine (인덱스) ",") \t \t \t 다음 tempFile.Write (currentLine (currentLine. 백작 - 1)) \t \t tempFile.WriteLine() 루프 tempFile.Flush() tempFile.Dispose() origFile.Dispose() IO.File.Copy (임시 파일, OrigFile, 참) IO.File.Delete (임시 파일)'이 사이트에 – donbyte

0

당신은 ADO를 사용하여 CSV 파일에 연결합니다. 추가 정보를 원하시면 여기를 참조하십시오 :

How to read a CSV file into a .NET Datatable

그러나, 나는 간단한 파일 입출력 방법과 다시 그것을 밖으로 작성 후, 배열에로드하고 간단하게 추천 할 것입니다. 다음, 수정,

File.WriteAllLines(rows) 
관련 문제