Re : Importez plusieurs fichiers CSV, mais certaines erreurs de format de titre doivent être modifiées par JSLS'il est possible de fournir un exemple (ou quelques-uns s'il existe différents types de) de fichier .csv, cela faciliterait la tâche. Sinon, pourriez-vous fournir un tableau de données « cassé » ?
Re : Importez plusieurs fichiers CSV, mais certaines erreurs de format de titre doivent être modifiées par JSLJ'ai joint un exemple de tableau pour votre référence
Importez plusieurs fichiers CSV, mais certaines erreurs de format de titre doivent être modifiées par JSLJ'essaie d'importer plusieurs fichiers CSV, la fonction "importer plusieurs fichiers" ne fonctionne pas bien car le format du nom de colonne de données d'origine présente deux problèmes qui entraîneront une différence entre le titre et les données.
1. Le nom de la colonne de données ressemble à ceci : Date, heure, nom ( ABC ) (DEF ) taille poids ......etc
2. Les dilim dont j'ai besoin sont l'espace et (et)
3. Cependant, il y a un espace ou une tabulation supplémentaire avant "Date", de sorte que le nom de la première colonne devient Colonne 1 plutôt que Date, et le titre est décalé d'une colonne vers la droite par rapport aux données.
4. la deuxième erreur est (D, il n'y a pas d'espace entre ces deux pour le titre, ils sont donc traités comme un seul titre, mais les données sont séparées en ( et D deux colonnes car il y a de l'espace entre les deux, donc le titre sera décalé vers la gauche une colonne comparer aux données
5. La première erreur existe toujours avant le nom de la première colonne "Date", mais la deuxième erreur "(D" peut apparaître dans un ordre différent en fonction de l'outil source
Je voudrais écrire un JSL afin qu'il puisse correspondre automatiquement à tous les titres et colonnes, mais je ne sais pas comment procéder :
Je suppose que la première étape consiste à utiliser Get Column Names() puis à analyser les noms, mais parse() et word() semblent ne pas fonctionner.
Je suis coincé ici, vraiment brut en codage, merci d'avance pour votre aide

Automatisation et scriptsRe : Importez plusieurs fichiers CSV, mais certaines erreurs de format de titre doivent être modifiées par JSLSur la base de l'exemple de deux lignes, je nettoierais probablement le fichier .csv (supprimer () et réduire les espaces), puis utiliserais Open with Char to Blob() pour convertir cette chaîne "fixe" en une table de données.
Names Default To Here(1);
str = Load Text File("$DOWNLOADS/sample CSV.csv");
lines = Words(str, "\!N");
data = Transform Each({line}, lines,
str = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
);
str = Concat Items(data, "\!N");
dt = Open(Char To Blob(str),
Import Settings(
End Of Line(CRLF, CR, LF),
End Of Field(Spaces, Space, 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),
First Named Column(1),
Data Starts(2),
Lines To Read("All"),
Year Rule("20xx")
)
);Re : Importez plusieurs fichiers CSV, mais certaines erreurs de format de titre doivent être modifiées par JSL@jthi
Votre solution est géniale !
Une question.Votre ligne où vous supprimez les parenthèses de chaque ligne, vous précisez
str = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
où vous remplacez tous les "(" par ")", puis remplacez tous les ")" par "".
Mon approche à l'ancienne serait la suivante :
str = Collapse Whitespace(Substitute(line, "(", "", ")", ""))
où les "(" sont remplacés par "" puis les ")" sont remplacés par "".
Y a-t-il un avantage à votre syntaxe ou est-ce juste un choix personnel ?
Re : Importez plusieurs fichiers CSV, mais certaines erreurs de format de titre doivent être modifiées par JSLC'est juste mon choix personnel. Généralement, lorsque je souhaite remplacer plusieurs éléments par la même chose, je fournis Substitute une liste des valeurs à remplacer, puis la valeur une fois. Si je veux les remplacer par différentes choses, j'utilise l'approche que vous avez montrée OU si je dois le construire dynamiquement/avoir un fichier de configuration, j'utiliserai deux listes
Names Default To Here(1);
str = "AA BB CC DD";
a = Substitute(str, {"AA", "BB"}, "11"); // a = "11 11 CC DD";
b = Substitute(str, "AA", "11", "BB", "22"); // b = "11 22 CC DD";
subs = ["AA" => "33", "BB" => "44"];
c = Substitute(str, subs << get keys, subs << Get Values); // c = "33 44 CC DD";
show(a, b, c);Re : Importez plusieurs fichiers CSV, mais certaines erreurs de format de titre doivent être modifiées par JSLMerci pour votre soutien, cette méthode fonctionne bien pour un fichier unique
Mais il me reste encore une question, j'ai beaucoup de fichiers du même format qui doivent être importés en un seul fichier JMP.
Il semble donc que cette méthode m'oblige à les ouvrir un par un, puis à les cocaténer en un seul fichier.
C'est pourquoi ma pensée initiale était :
1. utiliser plusieurs fonctions d'importation
2. obtenir les noms de colonnes
3. utilisez ensuite la fonction de recodage du nom de colonne pour modifier chaque nom de colonne
Re : Importez plusieurs fichiers CSV, mais certaines erreurs de format de titre doivent être modifiées par JSLY a-t-il une raison spécifique pour laquelle vous ne pouvez pas effectuer les opérations suivantes ?
- Obtenez la liste des fichiers qui vous intéressent
- Utilisez For Each pour les parcourir en boucle
- À l'intérieur de la boucle, analysez les fichiers et concaténez-les dans une table que vous ouvrez en premier
Vous pouvez également essayer de corriger les colonnes, mais d'après votre exemple, il était beaucoup plus facile de simplement réparer le fichier csv que de commencer à jouer avec les noms de colonnes et/ou à modifier les valeurs après avoir importé les valeurs.
Re : Importez plusieurs fichiers CSV, mais certaines erreurs de format de titre doivent être modifiées par JSLRéparer le programme qui génère le fichier peut également être une bonne option. Ce n'est pas un CSV standard et je ne pense pas non plus qu'un autre programme puisse l'analyser correctement.
Re : Importez plusieurs fichiers CSV, mais certaines erreurs de format de titre doivent être modifiées par JSLConcaténer des tables de données montre une façon de le faire
Re : Importez plusieurs fichiers CSV, mais certaines erreurs de format de titre doivent être modifiées par JSLJ'ai essayé d'utiliser la boucle for pour parcourir les fichiers, mais cela ne fonctionne pas, on dirait que quelque chose ne va pas lorsque j'ai essayé de les concaténer.
Names Default To Here(1);
dir = Pick Directory("Select a directory");
filelist = Files In Directory(dir);
strings = {};
For(i = 1, i <= N Items(filelist), i++,
file = dir || Eval(Parse(filelist[i]));
str = Load Text File(file);
lines = Words(str, "\!N");
data = Transform Each({line}, lines,
str = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
);
str = Concat Items(data, "\!N");
strings = strings || str;
);
dt = Open(
Char To Blob(str),
Import Settings(
End Of Line(CRLF, CR, LF),
End Of Field(Spaces, Space, 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(2),
First Named Column(1),
Data Starts(3),
Lines To Read("All"),
Year Rule("20xx")
)
);
Re : Importez plusieurs fichiers CSV, mais certaines erreurs de format de titre doivent être modifiées par JSLAprès plusieurs essais, le code ci-dessous a réussi à importer plusieurs CSV via une boucle et le format est correct.
Mais j'ai encore deux problèmes :
1. à partir du deuxième fichier, les en-têtes ne sont pas exclus comme titre de colonne, ils sont traités comme des données dans le tableau, il y a deux lignes d'en-têtes, la première ligne est le nom du fichier, la deuxième ligne sont les titres séparés par un espace
2. Je voudrais ajouter une colonne de nom de fichier afin de pouvoir analyser différents fichiers, mais ce n'est pas comme la fonction d'importation de fichiers multiples que je peux facilement réaliser ?
Noms par défaut ici ( 1 );
dir = Pick Directory( "Sélectionner un répertoire" );
filelist = Fichiers dans le répertoire (dir);
ma liste = {} ;
Pour( i = 1, i <= N Items( filelist ), i++,
fichier = rép || "/" || liste de fichiers[i];
str = Charger le fichier texte (fichier);
lignes = Mots(str, "\!N");
data = Transformer Chacun({ligne}, lignes,
line = Réduire les espaces (Remplacer (line, {"(", ")"}, ""))
);
modifiéstr = Concaténer les éléments (données, "\! N");
maliste[i] = modificationstr;
);
dt = Ouvert(
Char To Blob (Concaténer les éléments (mylist, "\!N" ) ),
Importer les configurations(
Fin de ligne (CRLF, CR, LF),
Fin de champ( Espaces, Espace, CSV( 0 ) ),
Citations de bande( 1 ),
Utilisez l'apostrophe comme guillemet ( 0 ),
Utiliser les paramètres régionaux (0),
Traitez les colonnes vides comme numériques ( 0 ),
Compresser les colonnes numériques ( 0 ),
Compresser les colonnes de caractères ( 0 ),
Compresser la vérification de la liste verte ( 0 ),
Etiquettes( 1 ),
Noms de colonnes Début( 2 ),
Colonne nommée en premier ( 1 ),
Début des données( 3 ),
Lignes à lire( "Toutes" ),
Règle de l'année( "20xx" )
)
);
Re : Importez plusieurs fichiers CSV, mais certaines erreurs de format de titre doivent être modifiées par JSLNe créez pas une chaîne massive, mais créez plutôt des tables de données une par une et concaténez-les au fur et à mesure. De plus, lorsque vous publiez des scripts JSL, veuillez utiliser "Insérer un script JSL".
car cela rend la lecture beaucoup plus facile.
</CODE></PRE>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/60013iEF81464ED8426C0C/jthi_2-1703167262034.png" role="button" title="jthi_2-1703167262034.png" alt="jthi_2-1703167262034.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-711549" slang="en-US" mode="NONE">Re : Importez plusieurs fichiers CSV, mais certaines erreurs de format de titre doivent être modifiées par JSL</LINGO-SUB><LINGO-BODY id="lingo-body-711549" slang="en-US" mode="NONE"><P><A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/14366" target="_blank">@jthi</A> est vrai, mais si vous souhaitez continuer à concaténer les chaînes, vous aurez besoin de quelques modifications.<STRONG>Cela échouera si la concaténation est supérieure à 2 Go de caractères, car il s'agit de la chaîne la plus longue que JMP puisse gérer.</STRONG></P>
<P>idée:</P>
<PRE><CODE class=" language-jsl">
For( i = 1, i <= N Items( filelist ), i++,
file = dir || "/" || filelist[i];
str = Load Text File( file );
lines = Words(str, "\!N");
header1 = RemoveFrom(lines, 1); // remove the first line, two times.
header2 = RemoveFrom(lines, 1); // (removes both header lines.)
data = Transform Each({line}, lines,
// prepend the file name to each data line
filelist[i] || " " || Collapse Whitespace(Substitute(line, {"(", ")"}, ""));
);
modifiedstr = Concat Items(data, "\!N");
mylist[i] = modifiedstr;
);
header2 = "filename" || header2; // add the column name "filename"
insertInto(mylist,header2,1); // check the order of the arguments, the goal
insertInto(mylist,header1,1); // is to push these onto the front of the list
// now do the import...Names Default To Here(1);
dir = "$DOWNLOADS/New Folder (7)";
filelist = Files In Directory(dir);
mylist = {};
dt_collector = Empty();
For(i = 1, i <= N Items(filelist), i++,
file = dir || "/" || filelist[i];
str = Load Text File(file);
lines = Words(str, "\!N");
data = Transform Each({line}, lines,
line = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
);
modifiedstr = Concat Items(data, "\!N");
dt = Open(
Char To Blob(modifiedstr),
Import Settings(
End Of Line(CRLF, CR, LF),
End Of Field(Spaces, Space, CSV(0)),
Strip Quotes(1),
Use Apostrophe as Quotation Mark(0),
Use Regional Settings(0),
Treat empty columns as numeric(0),
Compress Numeric Columns(0),
Compress Character Columns(0),
Compress Allow List Check(0),
Labels(1),
Column Names Start(1),
First Named Column(1),
Data Starts(2),
Lines To Read("All"),
Year Rule("20xx")
),
invisible
);
dt << Set Name(filelist[i]);
dt << New Column("Source", Character, Nominal, << Set Each Value((dt << get name)));
If(!Is Empty(dt_collector),
dt_collector << Concatenate(
dt,
Append to first table
);
Close(dt, no save);
,
dt_collector = dt;
);
);
non testé, mais à peu près correct. recherchez InsertInto() et RemoveFrom(); Je n'ai pas JMP ouvert pour le moment. L'idée est de supprimer (et de capturer) les deux premières lignes, à chaque fois, et une fois que tout est capturé et empilé, de placer les deux premières lignes au début, avec le nom de colonne supplémentaire ajouté. Et à l’intérieur, ajoutez le nom du fichier pour chaque ligne.
Re : Importez plusieurs fichiers CSV, mais certaines erreurs de format de titre doivent être modifiées par JSLMerci pour votre soutien, j'ai vraiment beaucoup appris dans ce projet jsl.