Tcl: par défaut si la variable est vide?
J'ai "hérité" certains Tcl code, et alors que j'ai travaillé à travers des tutoriels et peut donner un sens de la langue, de mon propre Tcl constructions manque pas d'un certain... finesse.
Par exemple, j'ai ce code:
puts "Column 'name': [ $queryRs getString name ]"
$queryRs
est le résultat d'une requête SQL. Le [ $queryRs getString name ]
construire récupère le contenu de la colonne "nom" de la ligne actuelle dans le jeu de résultats. Si la base de données de champ est NULL, la puts
ne pas imprimer quoi que ce soit.
Je voudrais imprimer un "défaut" de la chaîne au lieu de cela, c'est à dire si [ $queryRs getString name ]
les résultats en rien, j'aimerais le remplacer par "--"
.
Maintenant, je pourrais faire quelque chose comme ceci:
set nameVar "[ $queryRs getString name ]"
if { [ string length $nameVar ] == 0 } {
set nameVar "--"
}
puts "Column 'name': $nameVar"
Mais il y a être une solution plus compacte, quelque chose qui peut être fait inline au lieu d'ajouter quatre lignes et une variable temporaire. Aider, s'il vous plaît?
OriginalL'auteur DevSolar | 2012-06-05
Vous devez vous connecter pour publier un commentaire.
Deux choses.
D'abord, Tcl n'ont pas de notion de
NULL
(nil
,undefined
ou quoi que ce soit) valeur, et quand vous voulez simuler une valeur de ce type, vous devez soit utiliser une variable et test de son existence ou l'utilisation d'une entrée dans unarray
dedict
ionary et de test pour son existence, trop. Si une telle variable/entrée existe, alors la valeur est définie, sinon il ne l'est pas.Malheureusement, le créateur de votre hérité code apparemment ne se soucient pas le cas où une variable peut être
NULL
doncNULLs
sont indiscernables de variables ayant des valeurs par défaut (une chaîne vide).Ensuite, vous pouvez utiliser une aide procédure pour faire ce dont vous avez besoin:
et puis comme ça:
name
au travers d'une fonction comme ça. Merci, c'est ce que j'ai été à la recherche pour.Ainsi, la fonction n'est pas strictement nécessaire, vous pouvez obtenir tout en utilisant
expr
et son opérateur conditionnel ternaire comme @bmk suggéré; une fonction spécialisée est tout simplement l'intention plus claire.Oui, mais il est généralement préférable d'avoir une définition complexe et l'utilisation la plus simple que l'inverse.
Euh... ne Tcl en fait quelque chose comme "ne"? J'ai dû remplacer
$val ne ""
avec[string length $val] > 0
pour obtenir votre code en cours d'exécution...bien sûr , juste vous avez Tcl âgés de plus de 8,4 ce qui signifie qu'elle est plus ancienne que la poussière -- voir calendrier. Notez que de 8,4 n'est pas entretenu et 8.6 est proche d'être libéré. Si possible, envisager de passer à 8.5.
OriginalL'auteur kostix
Vous pouvez utiliser le
x?y:z
construction de laexpr
de commande.x
est la condition,y
est l'alternative si la condition est remplie etz
est l'alternative six
n'est pas remplie.E. g. (mais toujours avec une variable temporaire):
OriginalL'auteur bmk