Je voulais importer un fichier txt dans JMP, mais le texte n'est pas parfaitement aligné. Je veux donc supprimer les cellules vides. J'ai essayé de nombreuses manières différentes, mais il semble que JMP ne puisse supprimer qu'une colonne/ligne entière. Existe-t-il un moyen de passer du format d'entrée au format de sortie ? Merci.
Saisir:
| Nom | Colonne1 | Colonne2 | Colonne3 | Colonne4 | Colonne5 |
| Emma | | 38 | 33208 | 30630 | 31360 |
| Marie | | 38 | 48263 | 44694 | 45753 |
| Lisa | 38 | 45961 | 42755 | 43766 | 43887 |
| David | 38 | 32799 | 30643 | 31365 | 31452 |
Sortir:
Nom | Colonne1 | Colonne2 | Colonne3 | Colonne4 | Colonne5 |
Emma | 38 | 33208 | 30630 | 31360 | 30350 |
Marie | 38 | 48263 | 44694 | 45753 | 47263 |
Lisa | 38 | 45961 | 42755 | 43766 | 43887 |
David | 38 | 32799 | 30643 | 31365 | 31452 |
Merci! Cela a très bien fonctionné ! Cette pièce est cruciale pour la chose sur laquelle je travaille actuellement, et c'est vraiment une grande aide.
Si votre fichier n'est pas extrêmement volumineux et que votre version de JMP inclut la fonction de caractère Collapse Whitespace();
Voici une solution plus simple utilisant JSL.
Names Default to Here(1);
infid = "c:\temp\ExtraTab_testIn.txt";
outfid = "c:\temp\_xxxdummy.txt";
fid = Load Text File(infid);
ww = words(fid, "\!N"); //each line is stored as text in a list
for(i=1, i<=nitems(ww), i++,
ww[i] = Collapse Whitespace(ww[i]); //replace tabs spaces, or any nonprinatble char even EOL with a single space
);
fid = Concat Items(ww, "\!N"); //combine into a single text and add the EOL char
Save Text File(outfid,fid); //save it
<BR />delete symbols(fid, ww);
//open it
dt = Open( outfid,
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( 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( 0 ),
Column Names Start( 1 ),
Data Starts( 1 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
If( File Exists(outfid), Delete File(outfid) );
@emmablue , Jim a proposé une solution pour résoudre le problème une fois le fichier texte importé. Je vais vous expliquer deux options, chacune dépend de votre fichier d'origine.
# 1 Si votre fichier d'origine contient des espaces comme délimiteurs de colonnes, la solution pourrait être simple. Lorsque vous sélectionnez Fichier > Ouvrir utiliser l'option Données avec aperçu et assurez-vous que Space et Spaces sont sélectionnés

Si vous aviez sélectionné Données, à l'aide des préférences d'importation de texte , votre valeur par défaut pourrait être Espace. Si tel est le cas, le correctif via l'interface utilisateur est utilisé Données avec aperçu . Si vous utilisez un script, l'instruction Open du script ci-dessous doit être utilisée.
#2 Si votre fichier d'origine comporte des onglets comme délimiteurs de colonnes, la solution n'est pas aussi simple. Via l'interface utilisateur, vous pouvez utiliser un éditeur de texte et utiliser rechercher et remplacer un onglet par des espaces.Je n'ai trouvé aucune méthode pour spécifier les onglets au cas où il y aurait des onglets supplémentaires. Commentaire : un Onglets L'option peut être un bon élément de liste de souhaits ou permettre à l'utilisateur de spécifier plusieurs caractères tels que 0x090x09 ou HexToChar ("0909") pour Autre ou ajouter une option à Ignorer les délimiteurs répétés . Si vous ne pouvez pas modifier le fichier, ou si vous ne souhaitez pas utiliser l'éditeur de texte pour remplacer chaque onglet par un espace, et si vous utilisez un PC Windows, vous pouvez modifier le fichier JSL ci-dessous en changeant les chemins de fichier. Si votre colonne Nom contient des espaces, cela ne fonctionnera pas et un script différent utilisant des expressions régulières peut être utilisé pour remplacer les onglets en double par un seul onglet.
Si vous copiez et collez les données dans le tableau, vous devez utiliser la solution de Jim.
Si vous avez plus de détails sur le fichier d'entrée, un script/une solution plus utile peut être fourni.
Names Default to Here(1);
findchar = "\!t"; //tab
infid = "C:\temp\ExtraTab_testIn.txt"; //file path
outfid = "c:\temp\_xxxdummy.txt";
//This was DOS script was found at StackOverflow 1/16/2019
//https://stackoverflow.com/questions/23075953/batch-script-to-find-and-replace-a-string-in-text-file-without-creating-an-extra/23076141
//It replaces the tabs in the infid with spaces and writes it to a outfid with spaces.
//If you want to replace the original file's tabs do the following
// uncomment lines 29 and 30 below: "del %textfile"" and "rename %newfile %textfile"
// change the Open( outfid, ..) to Open(infid, ...) in line 38
//To keep outfid, don't make the changes described above. But comment or delete the last JSL statement
dos_cmds = {
"cd c:\temp",
"@echo off &setlocal",
EvalInsert("set \!"search=%^findchar^\!""),
"set \!"replace=% \!"",
EvalInsert("set \!"textfile=^infid^\!""),
EvalInsert("set \!"newfile=^outfid^\!""),
"(for /f \!"delims=\!" %%i in (%textfile%) do (",
" set \!"line=%%i\!"",
" setlocal enabledelayedexpansion",
" set \!"line=!line:%search%=%replace%!\!"",
" echo(!line!",
" endlocal",
"))>\!"%newfile%\!""
// , "del %textfile%",
// "rename %newfile% %textfile%"
};
txt = concat items(EvalList(dos_cmds), "\!N");
f = Save Text File("c:\temp\Find_Replace.bat", txt, Mode("replace"));
Web("c:\temp\Find_Replace.bat"); //simple command to execute a .bat
dt = Open( outfid,
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( 0 ),
Column Names Start( 1 ),
Data Starts( 1 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
If( File Exists(outfid), Delete File(outfid) );
Cela pourrait être fait de différentes manières en utilisant JSL, cependant, en supposant que vous vouliez le faire de manière interactive, voici comment je le ferais
- Allez dans Tables ==> Empilez et empilez les colonnes 1 à 5 dans une nouvelle table de données
- Dans le nouveau tableau, faites un clic droit sur l'une des cellules manquantes et sélectionnez "Sélectionner les cellules correspondantes".
- Supprimer les lignes qui ont les valeurs manquantes
- Créez une nouvelle colonne, appelez-la "Colonne" et spécifiez dans les informations de la colonne pour que la colonne Initialise les données sur "Sequence Data" avec la valeur From de 1 et la valeur To de 5 (le nombre de colonnes qui ont été empilées) et la valeur Step à 4 (le nombre de lignes dans la table de données d'origine)
- Allez maintenant dans Tables==>Split et sélectionnez la colonne nommée "Column" comme sélection Split By, et la colonne nommée "Data" comme Split Column.
- La nouvelle table de données résultante devrait vous permettre soit d'effectuer une mise à jour Tables==> ou simplement un copier-coller pour copier les nouveaux résultats dans la table de données d'origine.