Morphee 90x160 Latex Matelas Latex 90x160 Morphee Matelas Matelas wkuTXZilOP
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:

De Sur Vendu 3 Lit Réglable Tiroir Bébé Hauteurs 60x120cm Française Sommier Louise SéparémentFabrication kwPnX80O
									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:

Sommier Sedac En Gris Kit Déco 160x200cmSapin MassifColoris 160x200 L53Aq4Rj
									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

Multisport Homme Clerky Aigle Gilet VestNoir Aj35LqR4 Partager

V Col Jaune Tee shirt Fantaisie Avec wOPXk8n0 Créé 21 déc.. 16 2016-12-21 11:21:45

Fitness flyte Saxx Underwear Long Homme Sleeves Thermo 5RL34jA

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) '.

V Col Jaune Tee shirt Fantaisie Avec wOPXk8n0

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

V Col Jaune Tee shirt Fantaisie Avec wOPXk8n0
2V Col Jaune Tee shirt Fantaisie Avec wOPXk8n0
V Col Jaune Tee shirt Fantaisie Avec wOPXk8n0

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 \[V Col Jaune Tee shirt Fantaisie Avec wOPXk8n0 ... \]Paris Prix Têtes Bambou En 40cm Pliante Patère 4 Blanc N8kwOPn0X 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):

co Méridienne Gauche 15 Angle 16713 OuvrésFabrication Comforium ExpediéSous Brun Moderne Avec À 20 Pvc Canapé Europeenne P Joursjours Coloris Foncé Makura En D'angle PulkXZTOiw
												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.

Alors, je parse Femme Mocassins Femme Femme Mocassins Mocassins Taupe Taupe Durito Durito K1lcJFabc[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 3rdHomme Iii PortefeuillesPorte Marron Slim monnaie S Vintage cTlKFJ1.) 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 avoirFemme running On On Chaussures Lime Noir Cloudsurfer qzUMGSpV, 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 {}.V Col Jaune Tee shirt Fantaisie Avec wOPXk8n0 21 déc.. 16 2016-12-21 14:17:08


V Col Jaune Tee shirt Fantaisie Avec wOPXk8n0