Я читаю текстовый файл, содержащий в основном альфа-символы. содержание не очень важно, но размер каждой строки очень важен. Процесс, которому я передам этот текст, потребует, чтобы каждая строка содержала не более 50 символов. Поэтому я предварительно обработаю текст и добавлю перевод строки, чтобы убедиться, что это происходит.
Я попробовал несколько регулярных выражений VB.NET, таких как ^.*$, но на самом деле это не разбивает строки на 50 символов. Я бы брал результат и перебирал каждое совпадение, а затем вырезал его и записывал в объект в памяти. Можно ли это сделать с помощью одного прохода регулярного выражения?
В противном случае я буду использовать потоковый ридер и в каждой строке проверять длину и, если ‹=50, записывать ее с помощью потокового редактора. если> 50, разрежьте его на части по 50, а затем используйте стример.
Краткий пример моего текста:
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()
Надеюсь, что это поможет кому-то с той же проблемой.