3

2 つの文字列の間にタブを挿入するのに問題があります。

stringOne := 'Name'.
stringTwo := 'Address'.

私はもう試した:

info := stringOne, String tab, stringTwo.

また

info := stringOne, Character tab asString, stringTwo.

しかし、これら 2 つのメッセージのいずれも理解されていません。ビジュアルワークスを使用しています。

4

4 に答える 4

3

Goog は、タブを含む文字列を作成する方法を提供しました

String with: Tab

VisualWorks では Tab が認識されず、Tab を置き換える必要があることを自分で発見しました。

Character tab

これら2つのものをワークスペースにまとめて評価し、タブ文字を含む文字列が得られることを確認します

String with: Character tab

次に、それを連結で使用します

info := stringOne, (String with: Character tab), stringTwo.

(多くの連結を行う場合は、WriteStreamnotを使用してください,)

于 2009-10-30T17:23:30.677 に答える
2

マクロ展開を使用する最短:

info := '<1s><T><2s>' expandMacrosWith: one with: two
于 2009-11-18T11:39:32.173 に答える
2

確認する Visual Works はありませんが、IBM Smalltalk ではTab(大文字と小文字に注意してください) はタブ文字です。
多分これを試してください:

info := stringOne, Tab asString, stringTwo.

編集(re:あなたのコメント):

わかりTabました。タブ文字の正しい名前ではないか、文字クラスが応答しませんasString
Tab class「文字」と答えた場合は、文字を文字列に変更する方法を見つける必要があるだけです。ビジュアルワークスで。「文字」と答えない場合は、VisualWorks でタブ文字の正しい名前が見つかりませんでした。


編集2:

Visual Worksで文字を文字列に変換する簡単な方法がわからないので、とにかくうまくいくはずの解決策があります. asStringとにかくこれがすべてです。
おそらく複数回使用したいので、文字列として保存できます。

tabString := String with: Tab.
info := stringOne, tabString, stringTwo
于 2009-10-29T03:16:44.920 に答える
1

WriteStream ベースのソリューション (もう少し冗長ですが、適切にスケーリングされ、do:separatedBy のようにループで使用できます)

ws := (String new:50) writeStream.
ws
    nextPutAll: stringOne;
    tab;
    nextPutAll: stringTwo.
info := ws contents.

または、ワンライナーコードが本当に好きなら:

info := (String new writeStream) nextPutAll: stringOne; tab; nextPutAll: stringTwo; contents.
于 2012-07-11T12:11:20.683 に答える