2017-09-26 3 views
1

J'ai essayé de comprendre pourquoi mon tableau ne sortira pas.Impossible de générer un tableau simple?

J'ai effectué un vidage de var sur la matrice et elle l'a vidée correctement, mais lorsque j'essaie de la sortir, elle renvoie une erreur fatale. De plus, j'ai pensé que je devais peut-être faire une boucle sur le tableau pour y accéder, donc j'ai aussi essayé et bouclé le tableau en faisant un vidage de var mais quand je l'ai sorti, il casse la page.

Voici mon code que j'ai essayé j'ai essayé pendant presque 3 heures essayant maintenant diverses choses.

ColdFusion:

<cfset defaultDirectory = "C:\uploads\" /> 

<cfdirectory 
    directory="#defaultDirectory#" 
    action="list" 
    name="myList" 
> 

<!---Get Array of Directory Names ---> 
<cfquery dbtype="query" name="fileNames"> 
    SELECT NAME 
    FROM myList 
</cfquery> 

<!---Create array ---> 
<cfset myArray=arraynew(1)> 

<!---Populate array with directory query data "name" ---> 
<cfloop query="fileNames"> 
    <cfset myArray[CurrentRow][1]=#defaultDirectory# & NAME & "\"> 
</cfloop 

Jusqu'à ce point, tout semblait aller bien. J'ai jeté la variable tableau et il a sorti ce que je voulais. J'ai donc essayé et cela a retourné une erreur fatale.

<cfoutput> 

<cfif directoryExists("#myArray[1]#")> 
    it exists. 
    <cfelse> 
    Doesn't exists. 
</cfif> 

<cfoutput> 

Voici la capture d'écran de la variable en cours de vidage.
enter image description here

Ce que je puis pensais était que j'ai peut-être faire une boucle sur le tableau afin d'y accéder?

alors j'ai essayé ça.

<cfloop index="i" from="1" to="#arrayLen(myArray)#"> 
    <cfdump var="#myArray[i]#" 
</cfloop> 

ce réussi à vider toutes les choses du tableau, mais lorsque je tente de la sortie, il retourne une erreur fatale, je ne sais pas pourquoi. J'ai regardé des tutoriels sur la façon de vider le tableau et je ne suis pas sûr de ce que je fais mal? Toute suggestion serait appréciée.

Voici une capture d'écran de la structure de monTableau qui a été demandé:

Je l'ai fait

<cfvar dump="#myArray#"> 

enter image description here

+0

Veuillez ajouter une capture d'écran de la matrice déposée afin que nous puissions examiner la structure. –

+0

Est-ce ce que vous vouliez? C'est la structure de la variable myArray en cours de vidage. – Curious13

+0

Oui. Donc, vous avez un tableau de structures. Je posterai une réponse car elle me donnera plus d'espace pour le décrire. –

Répondre

2

Vous avez un tableau de structures. Vous ne pouvez donc pas simplement afficher la valeur du tableau sous forme de chaîne; c'est pourquoi vous obtenez une erreur.

Vous devez référencer l'index de la baie ainsi que la clé de la structure pour extraire la valeur. Quelque chose comme ce pseudo-code: arrayName[arrayIndex][structureKey]. Il semble que vous l'ayez dans l'exemple de code initial. Ici:

<cfset myArray[CurrentRow][1]=#defaultDirectory# & NAME & "\"> 

Il était source de confusion pour moi parce que la clé de la structure se trouve être le numéro 1. Donc, cela ressemblait à un index ou à quelque chose.

J'ai créé un aperçu pour vous montrer un exemple de travail - TryCF Gist. Voici le code que j'ai écrit:

<cfscript> 
structA = {1="C:\uploads\101 San Fernando"}; 
structB = {1="C:\uploads\121 Tasman"}; 
structC = {1="C:\uploads\360 Residences"}; 
structD = {1="C:\uploads\481 On Mathilda"}; 

myArray = []; 
ArrayAppend(myArray,structA); 
ArrayAppend(myArray,structB); 
ArrayAppend(myArray,structC); 
ArrayAppend(myArray,structD); 

writeDump(myArray); 

//writeOutput(myArray[1][1]); 

for (i=1;i LTE ArrayLen(myArray);i=i+1) { 
    writeOutput('<p>' & myArray[i][1] & '</p>'); 
} 
</cfscript> 

La sortie de ce code est:

enter image description here

donc votre code devrait ressembler à ceci:

<cfif directoryExists("#myArray[1][1]#")> 
    it exists. 
<cfelse> 
    Doesn't exists. 
</cfif> 

Ou si vous enveloppez que dans une boucle comme ceci:

<cfloop index="i" from="1" to="#arrayLen(myArray)#"> 
    <cfif directoryExists("#myArray[i][1]#")> 
     it exists. 
    <cfelse> 
     Doesn't exists. 
    </cfif> 
</cfloop> 
+0

Merci pour l'explication! Très utile – Curious13