2010-02-24 4 views
4

J'ai une tâche NAnt "ship" pour empaqueter mes scripts .sql actuels dans une construction, puis nommez la construction avec un int incrémenté {######} et copiez-la dans un dossier de construction.Je veux utiliser NAnt foreach pour itérer les fichiers dans un dossier, comment forcer l'itération alphabétique?

J'ai une autre tâche NAnt qui exécute ces scripts de construction.

Ils doivent exécuter dans l'ordre, mais dans ma dernière tentative, ils ne l'ont pas été. Puis-je "forcer" NAnt à travailler par ordre alphabétique?

+0

Pourriez-vous s'il vous plaît inclure plus de détails et un extrait de code. J'ai essayé de boucler des fichiers dans un répertoire et apparemment les fichiers sont itérés dans l'ordre alphabétique. –

Répondre

4

FAIL:

<fileset basedir="source\tsql\builds\" id="buildfiles"> 
    <include name="*.sql.template.sql" /> 
    <exclude name="*.sql" /> 
    <exclude name="*asSentTo*" /> 
</fileset> 
<foreach item="File" property"filename"> 
    <in refid="buildfiles"> 
    <echo message="${filename}" /> 
    </in> 
</foreach> 

PASS:

<foreach item="File" property="filename" in="source\tsql\builds"> 
    <do> 
    <if test="${string::ends-with(filename,'.sql.template.sql')}"> 
     <echo message="${filename}" /> 
    </if> 
    </do> 
</foreach> 
+1

Duncan pour formater le XML ou le code dont vous avez besoin d'ajouter au moins 4 espaces avant chaque ligne. Vous avez 2. J'ai modifié pour le formater. Vous pouvez également sélectionner le texte et utiliser l'icône du bloc de code (les uns et les zéros sur l'icône). Vous pouvez cliquer sur modifier pour voir ce que j'ai fait. –

+0

Merci, Ahmad! – Duncan

1

Pour satisfaire ma curiosité, j'ai essayé de reproduire le problème avec ce script:

<?xml version="1.0"?> 
<project name="foreach.test" default="foreach.alpha"> 
    <target name="foreach.alpha"> 
    <foreach item="File" in="C:\foo" property="filename"> 
     <do> 
     <echo message="${filename}" /> 
     </do> 
    </foreach> 
    </target> 
</project> 

Les noms de fichiers sont imprimées dans l'ordre alphabétique. Donc, l'utilisation classique de foreach semble déjà être la solution au problème.

+0

Comment avez-vous justifié votre XML? – Duncan

1

Voici comment vous le faites avec un ensemble de fichiers

<fileset id="mySet"> 
    <include name="*.sql" /> 
</fileset> 
<copy> 
    <fileset refid="mySet" /> 
</copy> 
<foreach item="File" property="filename"> 
    <in> 
    <items refid="mySet" /> 
    </in> 
    <do> 
    <echo message="Copied files: ${filename} to directory: ${Folder}." /> 
    </do> 
</foreach> 
Questions connexes