Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".

#1 Le 02/12/2012, à 23:00

Salim86

faire une boucle en tcsh qui n'écrase pas le résultat

Bonsoir,

La question que je me pose est la suivante :

Je pars d'un script

foreach filename (t1_????????)
asegstats2table --subjects ${filename} \
  --segno 11 12 13 \
  --tablefile asegstats.txt 
end

C'est dans le cadre pour un logiciel d'imagerie médicale (freesufer) que je l'utilise.

C'est le script qui me permet d'obtenir les résultats pour un grand nombre de sujets.

je dispose d'images d'irm qui s'appellent t1_???????? (wild card qui permet de prendre en compte tous les fichiers)
les résultats de chaque image doivent être importés dans un fichier qui s'appelle asegstats.txt

le problème c'est qu'avec ce script (fait en tcsh), à chaque fois que le logiciel fait une boucle, il efface le résultat mis dans asegstats de la boucle précédente.

donc au final je me retrouve avec les résultats pour la dernière image.

Y a t il une possibilité de faire en sorte que le logiciel n'écrase pas le résultat pour que je puisse avoir dans mon fichiers texte tous les résultats des images que je veux analyser.

Par image j'entends images d'IRM.

Merci Beaucoup,

Bonne soirée

Charles

PS : il ne m'a pas semblé que la question ait déjà été posée, mais c'est difficile de trouver grâce à la fonction recherche ce genre d'information

Sachant que quand je tape le script dans le terminal en remplaçant $filename par des noms de fichiers (t1_37481019  t1_098UJH27 etc..) j'ai le résultat que je veux et le résultat de n+1 n'écrase pas le résultat de n (où n est une imager d'IRM)

Dernière modification par Salim86 (Le 02/12/2012, à 23:06)

Hors ligne

#2 Le 03/12/2012, à 00:03

pingouinux

Re : faire une boucle en tcsh qui n'écrase pas le résultat

Bonsoir,
Je ne connais pas tcsh, mais j'ai regardé la doc de asegstats2table. Est-ce que ceci peut convenir ?

asegstats2table --subjects t1_???????? --segno 11 12 13 --tablefile asegstats.txt

Hors ligne

#3 Le 03/12/2012, à 01:49

Salim86

Re : faire une boucle en tcsh qui n'écrase pas le résultat

Bonsoir,

Merci beaucoup pour la rapidité de ta réponse. Merci d'avoir regardé dans la documentation, tu utilises le logiciel aussi ?
J'ai déjà essayé ce que tu propose, mais malheureusement les wild mask (de type ???????) ne sont pas pris en charge par le bash tcsh, par contre il fonctionne bien dans le script.
il faut mettre le nom de chaque image sans wild mask.

une autre option à laquelle je pensais sans pouvoir la concrétiser serait de faire un fichier texte à part et de faire en sorte que le script renvoie à ce fichier texte avec la fonction "cat".
mais si ça se trouve ça serait le même problème.

Si tu as une autre idée, ou même une piste je suis preneur.

Bonne soirée et bonne semaine

Charles

Hors ligne

#4 Le 03/12/2012, à 02:20

aduxas

Re : faire une boucle en tcsh qui n'écrase pas le résultat

Ton problème n'est pas lié à la shell que tu utilises.  Ta boucle en effet écrase le résultat précédent à chaque coup.  Il faut essayer un peu, p.e.

foreach filename (t1_????????)
asegstats2table --subjects ${filename} --segno 11 12 13 >> asegstats.txt
end

ou encore

foreach filename (t1_????????)
asegstats2table --subjects ${filename} --segno 11 12 13 --tablefile A.txt
cat A.txt >> asegstats.txt
end

La première commande suppose que la sortie par défaut (stdout) correspond à l'opion

--tablefile <fichier>

Si ce n'est pas le cas, la deuxième méthode utilise une sortie temporaire et la colle au bout du fichier asegstats.txt.  Si celui-ci est un fichier texte (ascii), ça devrait marcher.  Tu peux insérer un "rm -f asegstats.txt" juste avant la boucle pour effacer la trace de la boucle précédente.

Hors ligne

#5 Le 03/12/2012, à 09:12

pingouinux

Re : faire une boucle en tcsh qui n'écrase pas le résultat

Salim86 #3 a écrit :

tu utilises le logiciel aussi ?

Non, c'est la première fois que j'en entends parler.

Es-tu sûr d'avoir mis le bon nombre de ? dans le nom du fichier ? Cette commande liste-t-elle bien tes fichiers ?

echo t1_????????

Hors ligne

#6 Le 03/12/2012, à 13:11

Salim86

Re : faire une boucle en tcsh qui n'écrase pas le résultat

oui tout à fait  : quand je fais ls t1_???????? ça marche sans pb.
je vais essayer ce que tu me conseilles ce soir

Hors ligne

Haut de page ↑