我正在阅读一个主要包含字母字符的文本文件。内容并不真正相关,但每行的大小非常重要。我将提供此文本的过程将要求每行不超过 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()
希望能帮助有同样问题的人。