주로 알파 문자가있는 텍스트 파일을 읽습니다. 내용은 실제로 관련이 없지만 각 줄의 크기는 매우 중요합니다. 이 텍스트를 입력하는 과정에서 각 줄의 길이는 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()
같은 문제가있는 사람을 돕는 희망.
예 저는 절대적으로 긍정적입니다. 이 시스템을 사용하려면 각 행이 감싸는 지 여부에 관계없이 50자를 넘지 않아야합니다. 감사합니다. – sinDizzy