Разделите текстовый файл так, чтобы длина каждой строки не превышала 50 символов.

Я читаю текстовый файл, содержащий в основном альфа-символы. содержание не очень важно, но размер каждой строки очень важен. Процесс, которому я передам этот текст, потребует, чтобы каждая строка содержала не более 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()

Надеюсь, что это поможет кому-то с той же проблемой.


person sinDizzy    schedule 23.05.2012    source источник
comment
да я абсолютно уверен. система, в которую это войдет, требует, чтобы каждая строка содержала не более 50 символов, независимо от того, переносится ли она.   -  person sinDizzy    schedule 24.05.2012


Ответы (1)


person    schedule
comment
Спасибо. у меня есть вариант этого, так что я думаю, что я на правильном пути. как только я настрою его еще немного, я опубликую свою рутину. - person sinDizzy; 24.05.2012