2009-10-29 14 views
2

Je rencontre des problèmes lors de l'insertion d'une tabulation entre deux chaînes.Smalltalk - Insertion d'un caractère TAB (Visual Works)

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

J'ai essayé:

info := stringOne, String tab, stringTwo. 

ou

info := stringOne, Character tab asString, stringTwo. 

Mais aucun de ces deux messages sont compris. J'utilise Visual Works.

Répondre

2

Je n'ai pas Visual Works à vérifier, mais dans IBM Smalltalk Tab (notez le cas) est un caractère de tabulation.
Peut-être essayer ceci:

info := stringOne, Tab asString, stringTwo. 

modifier (re: votre commentaire):

D'accord, soit Tab n'est pas le bon nom pour un caractère de tabulation ou votre classe de personnage ne répond pas Essayez de voir ce que Tab class vous donne, s'il répond "Caractère", alors vous avez juste besoin de savoir comment changer un caractère en une chaîne dans VisualWorks. S'il ne répond pas "Caractère", nous n'avons pas trouvé le bon nom pour les caractères de tabulation dans VisualWorks.


Edit2:

Je ne connais pas le chemin court pour transformer un personnage en une chaîne dans Visual Works, alors voici une solution qui devrait fonctionner de toute façon.Ceci est tout ce que asString ferait de toute façon:
Puisque vous voudrez probablement l'utiliser plusieurs fois, vous pouvez l'enregistrer sous forme de chaîne,

tabString := String with: Tab. 
info := stringOne, tabString, stringTwo 
+0

#asString, message non compris. Cela ne fonctionne pas sur Visual Works. Hmmm je ne peux même pas le trouver en ligne – user69514

+0

Il répond au personnage. Donc l'onglet Caractère est correct, mais il n'y a pas de méthode pour le convertir en chaîne. C'est bon mon truc va juste avoir l'air un peu aligné. Merci bien – user69514

+0

Ah d'accord, ça dépend des spécificités de VisualWorks, que je ne connais pas. J'ai cependant ajouté une solution plus longue qui devrait pouvoir fonctionner ... –

3

Goog vous a donné une façon de faire une chaîne qui comprenait une onglet

String with: Tab 

et par vous-même vous avez découvert que tab n'a pas été comprise dans VisualWorks et devrait être remplacé par

Character tab 

donc mettre ces 2 choses ensemble dans un espace de travail pour vérifier ÉVALUER donne une chaîne contenant un onglet caractère

String with: Character tab 

utiliser alors que dans votre concaténation

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

(Si vous allez faire beaucoup de concaténation puis utilisez un WriteStream pas ,)

+1

il est au moins dangereux d'utiliser l'opérateur virgule sans précaution. Et il y a un raccourci pour String avec:, il s'appelle asString. Donc, je réécrirais ceci comme stringOne copy, l'onglet Character asString, stringTwo – nes1983

+0

Sauf que dans certaines versions de VisualWorks, la classe Character n'implémente pas asString. Vérifié dans VW 3.5 et 7.8. C'est une des raisons pour lesquelles j'utilise presque toujours WriteStream. –

2

Sa plus courte à utiliser l'expansion macro:

info := '<1s><T><2s>' expandMacrosWith: one with: two 
0

solution de WriteStream (il est un peu plus bavard, mais les échelles bien et vous pouvez l'utiliser dans les boucles, comme do: separatedBy)

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

Ou si vous aimez vraiment un code de doublure:

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