Confusion avec la fonction word() et le délimiteur spécifiéBonjour à tous,
J'essaie de manipuler mes noms de colonnes. C'est très facile à faire une ou deux fois avec Find/Replace mais j'aimerais le scripter.
Essentiellement, je souhaite changer le nom d'une colonne de "Singules/Leucocytes vivants/Lymphocytes/Cellules B/A+B+C-,Fréq. du parent" en " Cellules B/A+B+C-,Fréq. de Parent".
Voici mon code actuel:
dt = Current Data Table ();
colList = dt << get column names(string);
For ( i = 1, i <= N Items(colList), i++,
If (
contains(colList[i], "Singlets/Live leukocytes/Lymphocytes/"), <BR />
Column(dt, colList[i]) << set name (Word(2, colList[i], "Lymphocytes/"))
));
Si j'exécute des parties de ce code individuellement, voici ce que j'obtiens :
ligne de code :
résultat dans le journal des scripts
colList[i]:
"Singlets/Live leukocytes/Lymphocytes/B cells/A+B+C-,Freq. of Parent"
contains(colList[i], "Singlets/Live leukocytes/Lymphocytes/"):
1
Word(2, colList[i], "Lymphocytes/"):
"iv"
Word(3, colList[i], "Lymphocytes/"):
" l"
Word(4, colList[i], "Lymphocytes/"):
"uk"
Word(9, colList[i], "Lymphocytes/"):
"f Par"
De toute évidence, mon délimiteur ne fonctionne pas comme je m'y attendais. Des idées?
J'ai d'abord essayé de faire Words(4, colList[i], "/") mais cela ne m'a donné que des "cellules B" car il y a un autre / immédiatement après. Contrairement à d'autres langages de programmation, je ne sais pas s'il existe un moyen de spécifier '4ème mot puis tout ensuite jusqu'à la fin' dans JSL. Je ne pense pas que cela soit possible, j'ai donc changé le délimiteur, pensant que cela résoudrait mon problème.
Merci beaucoup pour tout conseil !!
Re : Confusion avec la fonction word() et le délimiteur spécifiéOH! D'accord, cela rend également l'un des exemples du guide de script BEAUCOUP plus logique !!
J'ai fini par utiliser substr à mon avantage! Je posterai le code après le déjeuner !
Re : Confusion avec la fonction word() et le délimiteur spécifiéUne confusion est que l'argument délimiteur de la fonction WORDS signifie diviser ce texte si vous trouvez N'IMPORTE QUEL de ces caractères.
Cette approche peut vous rapprocher de ce que vous voulez :
collist = {};
collist[1] = "Singlets/Live leukocytes/Lymphocytes/B cells/A+B+C-,Freq. of Parent";
collist[2] = "Singlets/Live leukocytes/Lymphocytes/Another Text";
collist[3] = "Singlets/Live leukocytes/Lymphocytes/Hello World";
remove_text = "Singlets/Live leukocytes/Lymphocytes/";
len_text = length(remove_text);
for (i = 1, i <= nitems(collist), i++,
start_pos = contains(colList[i], remove_text);
if (start_pos,
end_pos = start_pos + len_text;
new_name = substr(collist[i], end_pos);
show(new_name);
Column(dt, colList[i]) << set name (new_name);
);
);
Re : Confusion avec la fonction word() et le délimiteur spécifiéLe délimiteur est un caractère et non une chaîne de caractères.
Vous pouvez également trouver des expressions régulières utiles dans ce problème.
Re : Confusion avec la fonction word() et le délimiteur spécifiéUtilisez N éléments (liste) pour déterminer le nombre de niveaux existants et prenez ceux de la fin.
Re : Confusion avec la fonction word() et le délimiteur spécifiéAussi, savez-vous pourquoi le code original ne fonctionne pas ?
Re : Confusion avec la fonction word() et le délimiteur spécifiéQue se passe-t-il si j'ai un nombre inégal d'éléments de liste ? Celui-ci serait list[4]||" "||list[5] mais si j'ai 6 éléments dans ma liste et que je veux qu'elle aille jusqu'à la fin...
J'essaie de pseudocoder certaines boucles for qui vont sur N éléments mais je ne l'ai pas encore compris.
Re : Confusion avec la fonction word() et le délimiteur spécifiéVoir Aide > Index des scripts > Fonctions > Caractère > Mots
Re : Confusion avec la fonction word() et le délimiteur spécifiéUtilisez "/" pour le délimiteur. Utilisez également la fonction Words() à la place. Vous obtiendrez une liste. Vous pouvez ensuite concaténer des éléments de liste. Dans ce cas, la nouvelle chaîne sera list[5] || liste[5].
Assez facile, hein ?