Importation de données vers JmpSalut,
Je développe une analyse JMP pour données périodiquement. J'ai une macro Excel qui génère un nouveau CSV chaque semaine dans un dossier particulier. Je suis encore un joueur très basique avec JMP, j'ai donc manqué le soutien de la communauté pour m'aider à créer un script pour effectuer cette activité. J'ai essayé de chercher mais je n'ai trouvé aucune solution. Le fichier CSV comporte 19 colonnes avec en-tête. Je peux éliminer la ligne d'en-tête du CSV si cela pose un problème. Quelqu'un peut-il m'aider avec une solution de code pour un script qui m'aide à importer automatiquement le fichier dans la table de données parent dans JMP afin que je puisse exécuter d'autres scripts qui peuvent simplement évaluer les données.
Re : Importer des données vers JmpMerci pour la réponsetxnelson. C'est ce qui se trouve dans le fichier journal pour "Online Trend Data Aggregated". (C'est le fichier qui s'ouvre lorsque j'exécute le script)
/*:
//:*/
// This script will concatenate cleaned online data files from APPLIKON controllers to a master table.
// Define function to open .xlsx files
DataUpdate = Function({filepath},
Open(
filepath,
Worksheets( "Data" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
);
//Define path to where .xlsx files are stored (location where this script is stored)
path = get default directory();
//Open Running Table (Online Trend Data Aggregated.jmp) - assuming in same directory as .xlsx files (could change path to wherever)
dt_running = Open(path||"Online Trend Data Aggregated.jmp");
//Get List of Files in Directory
files = Files In Directory(path);
//Remove any files from the list that are not .xlsx or do not contain "APPLIKON" in file name
for(i=N Items(files),i>=1,i--,
If(contains(files[i],".xlsx") == 0 | contains(files[i],"APPLIKON") == 0, Remove From(files,i));
);
//Get max(File Date) in running table to determine which files need to be appended
max_date = max(dt_running:File Date << Get Values);
//Extract Dates from File Names and determine if date is > max_date from running table
dates = {};
update_files = {};
for(i=1, i<=N Items(files),i++,
word_list = Words(files[i],"-"); //breaks out file name into words delimited by hyphens
temp_date = informat(trim(word_list[1]||"/"||word_list[2]||"/"||word_list[3]),"m/d/y"); //first 3 words are month, day, year - concatenat them separated by "/"
if(temp_date > max_date,
Insert Into(dates,temp_date);
Insert Into(update_files,files[i])
)
);
//Import selected files, add File Date column, and concatenate to running table
for(i=1,i<=N Items(update_files),i++,
dt_temp = DataUpdate(path||update_files[i]);
dt_temp << New Column("File Date", format("m/d/y"), Set Values(J(N Row(dt_temp),1,dates[i])));
dt_temp << Go To(:File Date) << Move Selected Column(To first);
dt_running << Concatenate( dt_temp, Append to First Table(1));
Close(dt_temp,nosave);
);
dt_running << Clear Column Selection;
/*:
Scriptable[]Re : Importer des données vers JmpLorsque vous exécutez simplement le fichier, sans utiliser le débogueur, quelles instructions obtenez-vous dans le journal ?Re : Importer des données vers JmpBonjour,
Je recherche la même solution que l'affiche originale !
J'ai copié ce script et l'ai modifié en fonction de mes besoins (y compris une suggestion ci-dessus de copier et coller le script d'importation depuis JMP lui-même au lieu de ce que présente la solution d'origine.)
...Mais ça ne marche pas pour une raison quelconque.
Le script ouvre le fichier JMP « Online Trend Data Aggregated », puis s'arrête et ne fait rien. Qu’est-ce qui est censé se passer après ça ?
Le débogueur parcourt tout le processus et le seul message que je reçois se trouve dans le coin supérieur droit et indique "Exécution du programme terminée".
Toute idée est très appréciée. Scénario ci-dessous :
// This script will concatenate cleaned online data files from APPLIKON controllers to a master table.
// Define function to open .xlsx files
DataUpdate = Function({filepath},
Open(
filepath,
Worksheets( "Data" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
);
//Define path to where .xlsx files are stored (location where this script is stored on a network drive)
path = get default directory();
//Open Running Table (Online Trend Data Aggregated.jmp) - assuming in same directory as .xlsx files (could change path to wherever)
dt_running = Open(path||"Online Trend Data Aggregated.jmp");
//Get List of Files in Directory
files = Files In Directory(path);
//Remove any files from the list that are not .xlsx or do not contain "APPLIKON" in file name
for(i=N Items(files),i>=1,i--,
If(contains(files[i],".xlsx") == 0 | contains(files[i],"APPLIKON") == 0, Remove From(files,i));
);
//Get max(File Date) in running table to determine which files need to be appended
max_date = max(dt_running:File Date << Get Values);
//Extract Dates from File Names and determine if date is > max_date from running table
dates = {};
update_files = {};
for(i=1, i<=N Items(files),i++,
word_list = Words(files[i],"-"); //breaks out file name into words delimited by hyphens
temp_date = informat(trim(word_list[1]||"/"||word_list[2]||"/"||word_list[3]),"m/d/y"); //first 3 words are month, day, year - concatenat them separated by "/"
if(temp_date > max_date,
Insert Into(dates,temp_date);
Insert Into(update_files,files[i])
)
);
//Import selected files, add File Date column, and concatenate to running table
for(i=1,i<=N Items(update_files),i++,
dt_temp = DataUpdate(path||update_files[i]);
dt_temp << New Column("File Date", format("m/d/y"), Set Values(J(N Row(dt_temp),1,dates[i])));
dt_temp << Go To(:File Date) << Move Selected Column(To first);
dt_running << Concatenate( dt_temp, Append to First Table(1));
Close(dt_temp,nosave);
);
dt_running << Clear Column Selection;
Re : Importer des données vers Jmp@cwillden
Cela a fonctionné à merveille, j'apprécie vraiment votre soutien. Cela a permis de gérer des centaines de milliers de lignes dans des fichiers CSV uniques en quelques secondes, merci !!!Re : Importer des données vers JmpVoici un exemple de la façon dont vous pourriez procéder.Disons que le fichier CSV contient 2 colonnes, X1 et X2.Je crée 2 exemples de fichiers csv ("3-29-18 - My Data.csv" et "4-5-18 - My Data.csv").J'ai également une table jmp en cours d'exécution que j'ai enregistrée dans le même répertoire que les fichiers CSV.
Le script suivant recherchera dans le répertoire tous les fichiers, filtrera tous les fichiers non CSV et les fichiers sans « Mes données » dans le nom du fichier.Il récupère ensuite la date la plus récente des fichiers déjà importés dans la table en cours d'exécution.Ensuite, il parcourt la liste des fichiers répondant aux critères précédents et extrait les dates du nom du fichier.Si la date est supérieure à la date maximale de la table en cours d'exécution, il place ce fichier dans une liste de fichiers à ajouter à la table en cours d'exécution.
Après cela, il parcourt les fichiers dont nous avons déterminé qu'ils doivent être ajoutés en les ouvrant d'abord, puis en ajoutant une colonne Date de fichier, puis en concaténant le fichier à la table en cours d'exécution.
//Define function to open up your CSV files - will need to be modified for your own CSV file
MyCSVImporter = Function({filepath},
Open(
filepath,
columns(
New Column( "X1", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "X2", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
)
);
//Define path to where csv files are stored
path = "$DOCUMENTS/temp/";
//Open Running Table (RunningTable.jmp) - assuming in same directory as CSV files (could change path to wherever)
dt_running = Open(path||"RunningTable.jmp");
//Get List of Files in Directory
files = Files In Directory(path);
//Remove any files from the list that are not .csv or do not contain "My Data" in file name
for(i=N Items(files),i>=1,i--,
If(contains(files[i],".csv") == 0 | contains(files[i],"My Data") == 0, Remove From(files,i));
);
//Get max(File Date) in running table to determine which files need to be appended
max_date = max(dt_running:File Date << Get Values);
//Extract Dates from File Names and determine if date is > max_date from running table
dates = {};
update_files = {};
for(i=1, i<=N Items(files),i++,
word_list = Words(files[i],"-"); //breaks out file name into words delimited by hyphens
temp_date = informat(trim(word_list[1]||"/"||word_list[2]||"/"||word_list[3]),"m/d/y"); //first 3 words are month, day, year - concatenat them separated by "/"<BR />
if(temp_date > max_date,
Insert Into(dates,temp_date);
Insert Into(update_files,files[i])
)
);
<BR />//Import selected files, add File Date column, and concatenate to running table
for(i=1,i<=N Items(update_files),i++,
dt_temp = MyCSVImporter(path||update_files[i]);
dt_temp << New Column("File Date", format("m/d/y"), Set Values(J(N Row(dt_temp),1,dates[i])));
dt_temp << Go To(:File Date) << Move Selected Column(To first);
dt_running << Concatenate( dt_temp, Append to First Table(1));
Close(dt_temp,nosave);
);
dt_running << Clear Column Selection;
Dans cet exemple, RunningTable contient déjà les données 3-29-18, il ajoutera donc uniquement les données 4-5-18.
Re : Importer des données vers JmpMerci!
@uday_guntupalli oui, les données seront toujours dans le même format, le même nombre de colonnes et les mêmes en-têtes.
J'ai déjà importé des données dans JMP une fois. La question est de mettre à jour automatiquement ces données chaque semaine à partir du nouveau fichier CSV qui sera généré. Chaque semaine, un nouveau fichier CSV sera généré avec le nom de fichier " - Mes données". Je souhaite que JMP importe ces données dans mon fichier parent à chaque fois. Comment écrire une commande pour que JMP accède automatiquement à un répertoire de dossiers, sélectionne le dernier fichier dans la liste, importe ces données et les modifie dans la table en cours d'exécution.
Re : Importer des données vers JmpJuste une précision sur @uday_guntupalli réponse:
Il fournira une interface comme celle-ci. Vous souhaiterez peut-être choisir « Données avec aperçu » afin de savoir ce que vous importez et de pouvoir le personnaliser. Une fois l'importation terminée, accédez au tableau des données importées.Regardez dans le panneau de tableau à gauche de l'affichage du tableau de données. Faites un clic droit sur le triangle vert devant l'élément "Source", cela fournira une option pour "modifier" où vous pourrez voir le script généré par JMP.Vous pourrez ensuite copier et coller ce script au début pour le développement de votre script hebdomadaire.
Re : Importer des données vers JmpSalut @NilD ,
JMP générera le script pour vous si vous pouvez l'importer manuellement la première fois.La table résultante aura un script "Source" qui montre exactement comment importer les données à l'aide de JSL.
Si JMP n'importe pas correctement le fichier .csv, procédez comme suit.Faites Fichier > Ouvrir (ou Ctrl + O) comme d'habitude (en changeant les types de fichiers dans la fenêtre Ouvrir un fichier de données en « Fichiers texte » si nécessaire), accédez au fichier .csv et sélectionnez-le.Avant d'ouvrir le .csv, vous devriez voir des boutons radio vous offrant différentes options pour ouvrir le fichier.L'un d'entre eux est "Données avec aperçu".En sélectionnant cette option, vous aurez la possibilité de modifier les paramètres d'importation avant d'importer les données dans JMP.

Re : Importer des données vers Jmp@NilD ,
Les fichiers seront-ils toujours au même format ? c'est-à-dire les mêmes noms de colonnes et le même type de données en leur sein ?
Le moyen le plus simple consiste à demander à JMP de vous fournir le script d'importation du fichier afin que vous puissiez personnaliser les sélections et réutiliser le script.
Fichier ==> Ouvrir ==> Sélectionnez le fichier souhaité
Il fournira une interface comme celle-ci. Vous souhaiterez peut-être choisir « Données avec aperçu » afin de savoir ce que vous importez et de pouvoir le personnaliser. Une fois que vous avez terminé, cliquez sur le triangle vert, il proposera une option "modifier" où vous pourrez voir le script généré par JMP.
