Как разбить файл RTF на строки? - PullRequest
3 голосов
/ 21 августа 2009

Я пытаюсь разбить RTF-файл на строки (в моем коде), и я не совсем понимаю, в основном потому, что я не совсем понимаю весь формат RTF. Кажется, что линии можно разделить на \ par или \ pard или \ par \ pard, или на любое количество забавных комбинаций.

Я ищу кусок кода, который разбивает файл на строки на любом языке.

Ответы [ 3 ]

1 голос
/ 21 августа 2009

Вы сталкивались с Карманным справочником О'Рейли Шоном М. Бёрком?

На странице 13 написано

Вот несколько практических правил для размещения разрывов строк в RTF:

  • Поместите новую строку перед каждым \ pard или \ (командами, описанными в разделе «Абзацы».
  • Поместите новую строку до и после таблицы шрифтов RTF, таблицы стилей и других подобных конструкций (например, таблицы цветов, описанной позже).
  • Вы можете поставить новую строку после каждого N th пробела, {, или}. (В качестве альтернативы: ставьте новую строку после каждого пробела, {или} после 60-го столбца.)

Или вы думали об извлечении открытого текста в виде строк и выполнении этого на любом языке открытого текста?

1 голос
/ 21 августа 2009

Я запрограммировал быструю и грязную рутину, и она, кажется, работает почти для всего, что я смог в нее бросить. Он в VB6, но легко переводится во что-то еще.

Private Function ParseRTFIntoLines(ByVal strSource As String) As Collection
    Dim colReturn As Collection
    Dim lngPosStart As Long
    Dim strLine As String
    Dim sSplitters(1 To 4) As String
    Dim nIndex As Long

    ' return collection of lines '

    ' The lines can be split by the following '
    ' "\par"                                  '
    ' "\par "                                 '
    ' "\par\pard "                            '

    ' Add these splitters in order so that we do not miss '
    ' any possible split combos, for instance, "\par\pard" is added before "\par" '
    ' because if we look for "\par" first, we will miss "\par\pard" '
    sSplitters(1) = "\par \pard"
    sSplitters(2) = "\par\pard"
    sSplitters(3) = "\par "
    sSplitters(4) = "\par"

    Set colReturn = New Collection

    ' We have to find each variation '
    ' We will look for \par and then evaluate which type of separator is there '

    Do
        lngPosStart = InStr(1, strSource, "\par", vbTextCompare)
        If lngPosStart > 0 Then
            strLine = Left$(strSource, lngPosStart - 1)

            For nIndex = 1 To 4
                If StrComp(sSplitters(nIndex), Mid$(strSource, lngPosStart, Len(sSplitters(nIndex))), vbTextCompare) = 0 Then
                    ' remove the 1st line from strSource '
                    strSource = Mid$(strSource, lngPosStart + Len(sSplitters(nIndex)))

                    ' add to collection '
                    colReturn.Add strLine

                    ' get out of here '
                    Exit For
                End If
            Next
        End If

    Loop While lngPosStart > 0

    ' check to see whether there is a last line '
    If Len(strSource) > 0 Then colReturn.Add strSource

    Set ParseRTFIntoLines = colReturn
End Function
1 голос
/ 21 августа 2009

Вы можете попробовать спецификацию (1.9.1) (см. Внешние ссылки на странице Википедии - на ней также есть пара ссылок на примеры или модули на нескольких языках программирования) .

Это, скорее всего, даст вам представление о «словах» для вставки строк, поэтому вы можете разбить файл на строки, используя четко определенный набор правил, а не делать предположения.

...