RTF ファイルを (私のコードで) 行に分割しようとしていますが、RTF 形式の全体を実際に理解していないことが主な理由で、うまくいきません。行は \par または \pard または \par\pard または任意の数の楽しい組み合わせで分割できるようです。
ファイルを任意の言語の行に分割するコードを探しています。
私は簡単で汚いルーチンをコード化しました。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.9.1)を試すことができます(ウィキペディアのページの外部リンクを参照してください。いくつかのプログラミング言語の例やモジュールへのリンクもいくつかあります)。
これにより、行挿入の「単語」のアイデアが得られる可能性が高いため、推測するのではなく、明確に定義された一連のルールを使用してファイルを行に分割できます。
Sean M. Burke によるO'Reilly のRTF Pocket Guideを見つけましたか?
13ページにこう書いてある
RTF に改行を入れるための経験則を次に示します。
それとも、平文を行として抽出し、平文の言語が何であれそれを行うことを考えていましたか?