2012-05-23 1 views
0

주로 알파 문자가있는 텍스트 파일을 읽습니다. 내용은 실제로 관련이 없지만 각 줄의 크기는 매우 중요합니다. 이 텍스트를 입력하는 과정에서 각 줄의 길이는 50자를 넘지 않아야합니다. 따라서 텍스트를 사전 처리하고 줄 바꿈을 추가하여 문제가 발생하지 않도록하십시오.각 줄이 50자를 초과하지 않도록 텍스트 파일을 분할하십시오.

^. * $와 같은 VB.NET 정규식을 여러 번 시도했지만 실제로는 50 자까지 줄을 구분하지는 않습니다. 결과를 가져 와서 각 일치를 반복하고 나서이를 잘라내어 메모리에있는 객체에 씁니다. 단일 정규식 패스로이 작업을 수행 할 수 있습니까?

그렇지 않으면 스트림 리더를 사용하고 각 줄에서 길이를 확인하고 < = 50이면 스트림 작성기로 작성하십시오. > 50이 50의 섹션에서 자르고 그 다음에 streamwriter를 사용하는 경우.

내 텍스트에 대한 간단한 예 :

119 SMITH KATY AAAA F ZZZ  X NB SX ET 
      MILES,200/LM450      
120 JONES THOMAS  W QQQ 66-W NB OS SC LW EP  
               ET 
      L/G/B/MAY20-2010/JONES/THOMAS/KEITH  121 BUBBA BILLY HH4 S XQT 2PA-F 1 IP SC LH ET 
               DOCC 
122 NEWTON IAASAC  S FTY 240-U NB QC LF KD EE 

그냥 효율적으로이 작업을 수행하는 방법에 대한 도움말을 찾고.

업데이트 : SSS에서 제안한대로 스트림 리더 방식을 사용했습니다. 그러나, 나는 오래된 Mid 함수를 피하고 Substring을 고수하려고했다. 따라서 나는 어떤 수표를 만들어야했고 다른 SO 게시물에서 몇 가지 코드를 사용해야했지만 어떤 것을 기억하지 못했습니다. 어쨌든 여기에 있습니다 :

Dim reader As New StringReader(aSource) 
    Dim line As String = Nothing 
    Dim writer As New StringWriter 
    Dim chunkSize As Integer = 50 
    Dim chunk As String 

    Do 
     line = reader.ReadLine() 
     If Not String.IsNullOrEmpty(line) Then 
      Debug.WriteLine(line.Length & "-->" & line) 
      'if line length is less than or equal to chunk size then write it out, otherwise cut it up and then write the chunks out 
      If line.Length <= chunkSize Then 
       writer.WriteLine(line) 
      Else 
       Debug.WriteLine("---------------------") 
       For i = 0 To line.Length Step chunkSize 
        Debug.WriteLine("i =" & i) 
        Debug.WriteLine("i+c=" & i + chunkSize) 
        Debug.WriteLine("L =" & line.Length) 
        If i + chunkSize > line.Length Then 
         chunk = line.Substring(i, line.Length - i) 
        Else 
         chunk = line.Substring(i, chunkSize) 
        End If 
        Debug.WriteLine(" " & chunk.Length & "-->" & chunk) 
        writer.WriteLine(chunk) 
       Next i 
       Debug.WriteLine("---------------------") 
      End If 
     End If 
    Loop While (line IsNot Nothing) 
    reader.Close() 
    reader.Dispose() 

    'this cut string now becomes our source 
    Debug.WriteLine("==>" & writer.ToString) 
    sourceText = writer.ToString 

    writer.Close() 
    writer.Dispose() 

같은 문제가있는 사람을 돕는 희망.

+0

예 저는 절대적으로 긍정적입니다. 이 시스템을 사용하려면 각 행이 감싸는 지 여부에 관계없이 50자를 넘지 않아야합니다. 감사합니다. – sinDizzy

답변

0
Imports System.IO 
Public Class Form1 

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
    Dim strFilenameIn As String = "C:\Junk\Input.TXT" 
    Dim strFilenameOut As String = "C:\Junk\Output.TXT" 
    Try 
     Using sr As New StreamReader(strFilenameIn) 
     Using sw As New StreamWriter(strFilenameOut) 
      Do 
      Dim strLine As String = sr.ReadLine() 
      If strLine Is Nothing Then Exit Do 'EOF 
      For i As Integer = 1 To strLine.Length Step 50 
       sw.WriteLine(Mid(strLine, i, 50)) 
      Next i 
      Loop 
     End Using 
     End Using 
    Catch ex As Exception 
     MsgBox(ex.Message) 
     Exit Sub 
    End Try 
    MsgBox(strfilenameout & " written") 
    End Sub 
End Class 
+0

. 나는 이것의 변이가있다 그래서 나는 적당한 경로에 Im를 생각한다. 일단 내가 그것을 조정할 때 좀 더 아픈 내 일상을 게시 할 수 있습니다. – sinDizzy

관련 문제