2009-09-14 5 views
0

文字列のために自分自身でワードラップ関数を作成するにはどうすればよいですか?私は各行を50文字以内にし、既存のCRLFを尊重したい。文字列用に独自のワードラッパーを作成する

+0

あなたは1がすでに存在しない場合は、改行を追加したいすべての50個の文字を意味しますか? – RichardOD

答えて

1

このような何かを、それはあなたが(私は一緒にマッシュポテトだけ迅速samle)始めます:

Private Sub Doit()  
    Dim Source As String = "" 
    Source &= "How to make my own word wrap function for string, I want each line to be no longer than 50chars and take respect existing CRLFs" & vbCrLf & vbCrLf 
    Source &= "So this will be a new row." 
    Dim wrappedtext As String = wrap(Source, 20, vbNewLine) 
    MsgBox(wrappedtext) 
End Sub 

Function wrap(ByVal text As String, ByVal maxlength As Integer, ByVal newline As String) As String 

    Dim tmp() As String = Split(text.Replace(vbCrLf, " | "), " ") 
    Dim ret As String = "" 
    Dim wrk As String = "" 
    For Each word As String In tmp 
     If word = "|" Then 
      ret &= newline 
      wrk = "" 
     ElseIf word = "" Then 

     Else 

      If Len(wrk & word) <= maxlength Then 
       wrk &= " " & word 
      Else 
       ret &= wrk & newline 
       wrk = word & " " 
      End If 

     End If 
    Next 
    If wrk <> "" Then ret &= wrk 
    Return ret 
End Function 
+0

ありがとう、素敵なコードが、時々途中から言葉を残す!時には二重のスペースもあります。 – Tom

+0

はい。私はちょうど一緒にそれを投げたので、ちょうど "プロトタイプ"です。しかし、そこから修正するのは難しい作業ではありません。 – Stefan

0

どのような観点からですか? SWアーキテクチャ?

デコレータのパターンを見てください。ストリームで作業したい場合は、 "Heads First:Design Patterns"という本の中で文字列修飾子が提案されています。それはJavaで書かれていますが、一般的なプログラミングのコンセプトは良い方法で記述されています。いくつかのページがありませんが、多くの情報が見つかりますhere

アルゴリズム自体は簡単ですね。