Comment mettre à jour automatiquement les lignes avec le nom de fichier à partir d'une importation de données dynamique?Je travaille sur un script qui importe plusieurs fichiers d'un dossier dans un seul tableau de données. J'ai créé une colonne répertoriée USP_ID dans laquelle je souhaiterais que le nom du fichier apparaisse dans chaque ligne. Bien que les données soient importées correctement, seul le nom du fichier Excel importé final est affiché dans cette colonne, alors que je souhaiterais que chaque nom de fichier soit affiché dans les lignes correspondant à ses données respectives.
J'ai répertorié mon script ci-dessous, avec la ligne qui, à mon avis, me pose problème, bien que je ne sache pas comment le résoudre. Toutes les suggestions seront grandement appréciées!
Names Default To Here( 1 );
Clear Symbols();
filelist = {};
filepath = Munger( Pick Directory( "Select the desired file directory" ), 1, "/", "" );
prefilelist = Files In Directory( filepath );
n2 = N Items( prefilelist );
For( i2 = 1, n2 >= i2, i2++,
file = (prefilelist[i2]);
If( Item( -1, prefilelist[i2], "." ) == "xlsm" | Item( -1, prefilelist[i2], "." ) == "xlsx",
Insert Into( filelist, file ),
Show( file )
);
);
nf = N Items( filelist );
cc_dt = New Table( "Combined data " );
cc_dt << New Column( "USP_ID", character, nominal );
For( iii = 1, iii <= nf, iii++,
filenow = (filelist[iii]);
fileopen = (filepath || filenow);
dt = Open( fileopen );
dt << Run Formulas();
cc_dt << Concatenate( Data Table( dt ), append to first table );
cc_dt:USP_ID << set each value( filenow ); // having issues with this I think?
Close( dt, nosave );
);
colList = cc_dt << get column names( character, string );
For( i = 1, i <= N Items( colList ), i++,
selRows = cc_dt << get rows where(
Column( cc_dt, colList[i] )[Row()] == "NaN" | Column( cc_dt, colList[i] )[Row()] == "0"
);
If( N Rows( selRows ) > 0,
Column( cc_dt, colList[i] )[selRows] = "0";
Column( cc_dt, colList[i] ) << data type( "numeric" ) << modeling type( "continuous" );
);
);Re: Comment mettre à jour automatiquement les lignes avec le nom de fichier à partir d'une importation de données dynamique?Salut Mélanie
Merci pour l'aide, bien que je ne puisse pas obtenir votre recommandation de fonctionner comme je le voulais, j'ai constaté qu'en assignant les colonnes Source aux tables de données avant de les concaténer, cela ferait:
nf = N Items( filelist ); //number of items in the working list
cc_dt = New Table( "Combined fermenter data " );
cc_dt << New Column( "Source", character, nominal );
cc_dt << New Column( "USP_ID", character, formula( Substr( :Source, 1, 7 ) ) );
For( iii = 1, iii <= nf, iii++, //this starts the first loop
filenow = (filelist[iii]);
fileopen = (filepath || filenow);
dt = Open( fileopen );
dt << Run formulas();
dt << new column("Source", character, set initial data(filenow));
cc_dt << Concatenate( Data Table( dt ), append to first table );
close(dt, nosave);
);Re: Comment mettre à jour automatiquement les lignes avec le nom de fichier à partir d'une importation de données dynamique?cc_dt<SPAN class="token punctuation">:</SPAN>USP_ID <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> set each value</SPAN><SPAN class="token punctuation">(</SPAN> filenow <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
Définir chaque valeur définit toutes les valeurs d'une colonne sur une constante. Ainsi, à chaque boucle, vous définissez chaque cellule de cette colonne avec le nom de fichier actuel. Vous devez définir uniquement les "nouvelles" cellules de la table concaténée avec le nom de fichier. Peut-être quelque chose comme ça?
cc_dt << Sélectionnez où (cc_dt: USP_ID == ""); // sélectionne les cellules vides, en supposant que les cellules précédentes ont toutes leurs valeurs de nom de fichier
selrows = cc_dt << Obtenir les lignes sélectionnées (); // récupère les numéros de lignes sélectionnés
cc_dt: USP_ID [selrows] = filenow; // définit uniquement les lignes de cette colonne sur le nom du fichier
HTH,
Mélanie