importer csv et modifier uniquement le format de quelques colonnesJ'ai des fichiers CSV qui doivent être importés et quelques champs correspondent aux versions du logiciel. Cependant, ils sont au format CSV comme xyz et ne sont pas encapsulés entre guillemets, donc JMP essaie de les intégrer sous forme de type de données numérique. Dans ce cas, JMP considère que le numéro est une date et le convertit en date. Il est donc très difficile de le reconvertir en une version utilisable.
Si j'importe manuellement un fichier, je peux utiliser l'aperçu pour forcer les colonnes dont j'ai besoin aux types de données souhaités. Cependant, le script d'importation résultant a 'new column()' pour chaque colonne, et je dois soit omettre le tout pour que JMP importe simplement le fichier OU répertorier les 186 colonnes juste pour que je puisse contrôler l'importation de quelques-unes.
Le vrai problème est que certains de ces fichiers ont des colonnes différentes... certains sont en commun, d'autres non, mais dans tous les cas, les colonnes de version sont en commun ET je dois contrôler la manière dont elles sont introduites.
Voici ce que j'aimerais pouvoir faire (ou quelque chose comme ça) mais le nombre total de colonnes est en réalité de 186...
Open(
filepath,
columns(
New Column( "ALGORITHM_VERSION", Character, "Nominal" ),
New Column( "CLUST_ALG_VERSION", Character, "Nominal" ),
New Column( "CYTOFILEIO_VERSION", Character, "Nominal" ),
New Column( "RELEASE_VERSION", Character, "Nominal" )
),
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" )
)
)
Accès aux donnéesRe : importer un fichier CSV et modifier uniquement le format de quelques colonnesOui, malheureusement, je n'aurai pas beaucoup d'informations sur l'organisation. Cependant, j'ai également vérifié auprès du support JMP et trouvé une solution.
Puisque la commande Open() essaie d'être intelligente et d'obtenir le bon format pour chaque colonne, la suggestion était d'effectuer Multiple File Import(). Comme l'objectif est la vitesse, il ne faut pas autant de temps pour identifier les types de données, donc le format xyz ressemble à un caractère à première vue, donc ça marche ! L'ironie est que cela m'a brûlé il y a quelque temps et j'ai dû ajouter du code à un script si MFI était utilisé pour corriger certaines des choses correctement identifiées par Open().
Dans ce cas, ce « défaut » était un avantage. Je ne sais pas si ce sera la solution à 100% qui fera toujours ce dont j'ai besoin, mais cela a facilement résolu le problème ici. Un merci à Wendy Murphrey qui m'a donné l'idée.
Re : importer un fichier CSV et modifier uniquement le format de quelques colonnesIl existe des options. Si je connaissais seulement les modèles pour les numéros de version et rien d'autre (nombre de colonnes, noms, types de données, etc.), vous pourriez utiliser Charger un fichier texte , parcourez les données une fois pour trouver où elles se trouvaient, puis créez le code d'importation en conséquence. Ou, vous pouvez lire toutes les colonnes sous forme de texte, puis vérifier chacune d'elles pour les numéros de version possibles (conversion en numérique lorsque cela est justifié). L’une ou l’autre approche peut être lente pour les fichiers très volumineux, mais robuste : vous ne perdrez pas d’informations. Plus vous en saurez sur l'emplacement possible du numéro de version, plus l'une ou l'autre de ces approches pourra être efficace.
Re : importer un fichier CSV et modifier uniquement le format de quelques colonnesEn regardant certaines mises en page, cela fonctionnerait pour certains d’entre eux, mais pas pour tous. et, bien sûr, je ne connaîtrai pas la mise en page que j'obtiendrai tant qu'elle ne sera pas traitée.
À l'heure actuelle, nous avons du code pour chaque voie de CSV et nous avons juste besoin d'envoyer les fichiers sur le bon chemin pour qu'ils soient traités... mais comme cela devrait être à 90 % le même pour tous, cela semble être dommage. n'est pas une solution plus dynamique.
Re : importer un fichier CSV et modifier uniquement le format de quelques colonnesPourriez-vous utiliser une formule comme
Char( Month( :colName ) ) || "." || Char( Day( :colName ) ) || "." ||
Char( Year( :colName ) )
se reconvertir ?
Re : importer un fichier CSV et modifier uniquement le format de quelques colonnesMon erreur, cela ne corrigera pas les colonnes qui ont une structure xyz
Voici un script qui devrait fonctionner pour changer correctement les colonnes en caractères.
Names Default To Here( 1 );
dt = Open(
filepath,
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" )
)
);
For( i = 1, i <= N Cols( dt ), i++,
If(
Contains(
Uppercase( Column( dt, i ) << get name ),
"_VERSION"
) & Column( dt, i ) << get data type == "Numeric",
Column( dt, i ) << set format( "Fixed Dec", 18, 0 );
Column( dt, i ) << data type( "Character" );
)
);