4

RTF ファイルを (私のコードで) 行に分割しようとしていますが、RTF 形式の全体を実際に理解していないことが主な理由で、うまくいきません。行は \par または \pard または \par\pard または任意の数の楽しい組み合わせで分割できるようです。

ファイルを任意の言語の行に分割するコードを探しています。

4

3 に答える 3

1

私は簡単で汚いルーチンをコード化しました。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
于 2009-08-21T05:25:09.747 に答える
1

仕様 (1.9.1)を試すことができます(ウィキペディアのページの外部リンクを参照してください。いくつかのプログラミング言語の例やモジュールへのリンクもいくつかあります)。

これにより、行挿入の「単語」のアイデアが得られる可能性が高いため、推測するのではなく、明確に定義された一連のルールを使用してファイルを行に分割できます。

于 2009-08-21T04:31:10.200 に答える
1

Sean M. Burke によるO'Reilly のRTF Pocket Guideを見つけましたか?

13ページにこう書いてある

RTF に改行を入れるための経験則を次に示します。

  • すべての \pard または \ (「段落」セクションで説明されているコマンドの前に改行を入れます。
  • RTF フォント テーブル、スタイルシート、およびその他の同様の構成要素 (後で説明するカラー テーブルなど) の前後に改行を挿入します。
  • N番目のスペース、{、または }ごとに改行を入れることができます。(別の方法: 60 桁目の後のすべてのスペース、{、または } の後に改行を入れます。)

それとも、平文を行として抽出し、平文の言語が何であれそれを行うことを考えていましたか?

于 2009-08-21T04:38:55.767 に答える