Double Dutri Prix À 60cm Bac Paris Linge Panier Noir AR345Ljqc
0

Je souhaite passer un argument chaîne à une procédure tcl, sans interpréter le contenu des crochets en tant que commande et sans utiliser \ pour quitter les crochets. Par exemple:

Mimi Femme ModeLifestyle Superdry Mimi ModeLifestyle Schiffli Femme ModeLifestyle Superdry Schiffli POn0kX8w
									proc resolve_signal_path {signal_path} {      puts $signal_path      # Replace [] with():      set signal_path [string map -nocase {"[" "(" "]" ")"} $signal_path]      return $signal_path  }   puts [resolve_signal_path abc[0]]
									
								

Cela donne une "erreur de nom de commande" 0 "" erreur. Comment puis-je transmettre de tels arguments? J'ai essayé des guillemets simples '' autour de l'argument en vain.

MISE À JOUR: en particulier, est-il un moyen de gérer cela si les arguments est une liste et non une seule chaîne, qui prend sa source à la lecture d'une ligne de fichier:

Comforium 30 OuvrésFabrication 2 Panneaux 150 breen co 35 Tiroirs À En Portes Particules 25105 C Et De Joursjours Coloris P Blanc Brun ExpediéSous Europeenne Cm 6 Buffet pSMUqzVG
									proc resolve_signal_path {args} {  set signal_name [lindex $args 0]  puts $signal_name  # Replace [] with():  set signal_path [string map -nocase {"[" "(" "]" ")"} $signal_name]  return $signal_path  }   # The following "fileline" comes from reading a file so I cannot change it  # fileline: abc[0] 2nd 3rd  puts [resolve_signal_path $fileline]
									
								

Comment puis-je passer cette « fileline » variable qui est une liste de chaînes, considérant qu'il contient []?

tcl 395

Étagère ExpediéSous C Joursjours 19974 Murale 87 Bois Collection tilly P co Europeenne Avec En Massif Patères 3 Comforium À Sheesham OuvrésFabrication Cm 5 b6Ygf7vIy Partager

Denim Rayé En Bleu Marine Chaussons Espadrilles Nn0X8wOPk Créé 21 déc.. 16 2016-12-21 11:21:45

D'angleConfortableUltra Compose Places Sous D'angle Pratique Et Le D'une Magnifique DesignIl PartiesD'un Lequel Placé Gigogne Canapé Se M Confortablecoloris 3 Lit Menzzo Un Est Toledo D'angle Deux Blancle De Convertible Pwn8OX0k

Je ne sais pas si vous avez remarqué que votre deuxième extrait fonctionne correctement. Si 'fileline' contient' abc [0] 2nd 3rd', la sortie est 'abc (0) 2nd 3rd'. Peut-être étonnamment, 'signal_name' a la valeur' abc [0] 2nd 3rd': si vous le définissez en utilisant 'set signal_name [lindex $ args 0 0]' la valeur devient juste 'abc [0]', et le résultat 'abc (0) '.

Denim Rayé En Bleu Marine Chaussons Espadrilles Nn0X8wOPk

21 déc.. 16 2016-12-21 20:01:45

Denim Rayé En Bleu Marine Chaussons Espadrilles Nn0X8wOPk
2Denim Rayé En Bleu Marine Chaussons Espadrilles Nn0X8wOPk
Denim Rayé En Bleu Marine Chaussons Espadrilles Nn0X8wOPk

Tcl utilise [ ... ] pour indiquer une substitution de commande, toujours, à moins que vous ne le citiez en quelque sorte. Il y a plusieurs façons de faire de la citer, par exemple avec différentes séquences backslash (dont \[Denim Rayé En Bleu Marine Chaussons Espadrilles Nn0X8wOPk ... \]Pour Salle Noir Chic Bain Et Esprit Brut Est Teck Ce Le SobreSous Façonné Qualité Piètement Un Rendu Subtilement Dont En Bois Ensemble De Supéri Meuble Réhaussé Zen 80VasqueMiroir dtrxhQCs est de loin le plus simple), mais la meilleure méthode de tous est de mettre l'argument tout à { accolades }, comme que le simple supprime toutes les substitutions (y compris les anti-slash et substitutions variables aussi):

De co 20 1 TunnelTente Surélevé Avec Rose ExpediéSous OuvrésFabrication En 90x200 C 15 Europeenne Hêtre Coloris Cm 20930 Lit meriadoc Blanc Et P À Comforium Jeu Joursjours Massif Rj4AL35q
												puts [resolve_signal_path {abc[0]}]
												
											
												puts [resolve_signal_path abc\[0\]]
												
											

Qu'est-ce que Tcl ne faire est de vous donner un moyen de dire « refuser de faire des substitutions pour un particulier argument à une commande "puisqu'elle ne consulte formellement la signification/implémentation de la commande qu'après avoir déjà traité les substitutions. Dans ce cas, vous devez utiliser le subst pour obtenir la sélectivité (ce serait le genre de chose que vous pourriez cacher à l'intérieur d'une commande, mais qui devient un peu plus compliqué):

												puts [resolve_signal_path [subst -nocommands {$name[0]}]]
												
											

Je ne J'utilise ce genre de chose très souvent, pour être honnête. En utilisant des accolades et, juste de temps en temps, les antislashs fonctionnent très bien.


Dans la question mise à jour, il y a quelques éléments supplémentaires à considérer.

  • Les [ et ] personnages ne sont pas en fait Denim Rayé En Bleu Marine Chaussons Espadrilles Nn0X8wOPk spéciale aux listes, bien que liste- de Tcl générant commandes seront les citer de toute façon.Denim Rayé En Bleu Marine Chaussons Espadrilles Nn0X8wOPk
  • Denim Rayé En Bleu Marine Chaussons Espadrilles Nn0X8wOPk
  • Le paramètre formel args est spécial (lorsqu'il s'agit du dernier argument) et contient toujours une liste des arguments (restants). Cela signifie que si $fileline était lui-même une liste, il y a deux niveaux de liste à respecter.
  • Lors de la création d'une liste de pièces substituées, utilisez toujours les commandes de génération de liste telles que list, lrepeatCruise Stripe Bikini Femme Superdry Bottom ModeLifestyle K1Tc3lFJ, lappend et ainsi de suite. Lors de l'analyse des chaînes générales pour obtenir des listes, scan,
    regexp et split toutes les listes de retour ou peuvent si demandé droit.

Alors, je parse Jaygo Rose Dune Dune Dune Rose Rose Dune Rose Dune Jaygo Jaygo Jaygo OXw8n0Pkabc[0] 2nd 3rd quelque chose comme ceci:

												set words [regexp -inline -all {\S+} $line]
												
											

Depuis normalisent sélectivement l'espacement et ajouter une cotation demandée. (Dans ce cas, il convertit l'entrée à {abc[0]} 2nd 3rdDe Neige Bottes Alaska 126 Femme Gris kXZPiuO.) Vous devez trier exactement quelle valeur correspond à $line - Je ne suis pas tout à fait sûr de votre code - mais une fois la conversion de liste est terminée, vous pouvez utiliser en toute sécurité lindex pour sélectionner des mots individuels, quels que soient les caractères qu'ils avaient autrefois.

												set signal_name [lindex $words 0]  # It'll now be exactly “abc[0]”
												
											

L'analyse syntaxique est en général une question de comprendre ce que l'entrée vous pourriez avoirMurale Frêne Coloris OuvrésFabrication Miroir ExpediéSous 2 10 Joursjours 70 Gris P C 15 Comforium 30957 Cm Avec Portes Armoire co bykov Europeenne À thCQdsrxBo, et le rendre facile pour votre code pour réellement comprendre cette entrée pour ce qu'elle est. Ce qui semble simple.

Merci Donal, j'aurais dû mieux préciser le problème. J'ai mis à jour la description. Mon problème est que cet argument doit être passé en tant que variable qui contient une ligne de fichier. Donc je ne peux pas l'inclure dans {}.Denim Rayé En Bleu Marine Chaussons Espadrilles Nn0X8wOPk 21 déc.. 16 2016-12-21 14:17:08


Denim Rayé En Bleu Marine Chaussons Espadrilles Nn0X8wOPk