Volevo importare un file txt in JMP, ma il testo non è perfettamente allineato. Quindi voglio eliminare le celle vuote. Ho provato molti modi diversi, ma sembra che JMP possa eliminare solo un'intera colonna/riga. C'è un modo per passare dall'input al formato di output? Grazie.
Ingresso:
| Nome | Colonna 1 | Colonna2 | Colonna3 | Colonna4 | Colonna5 |
| Emma | | 38 | 33208 | 30630 | 31360 |
| Maria | | 38 | 48263 | 44694 | 45753 |
| Lisa | 38 | 45961 | 42755 | 43766 | 43887 |
| Davide | 38 | 32799 | 30643 | 31365 | 31452 |
Produzione:
Nome | Colonna 1 | Colonna2 | Colonna3 | Colonna4 | Colonna5 |
Emma | 38 | 33208 | 30630 | 31360 | 30350 |
Maria | 38 | 48263 | 44694 | 45753 | 47263 |
Lisa | 38 | 45961 | 42755 | 43766 | 43887 |
Davide | 38 | 32799 | 30643 | 31365 | 31452 |
Grazie! Ha funzionato alla grande! Questo pezzo è fondamentale per la cosa su cui sto attualmente lavorando, e questo è davvero di grande aiuto.
Se il tuo file non è molto grande e la tua versione di JMP include la funzione di carattere Collapse Whitespace();
Ecco una soluzione più semplice utilizzando 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) );
@emmablu , Jim ha fornito una soluzione su come risolvere il problema una volta importato il file di testo. Spiegherò due opzioni, ciascuna dipende dal file originale.
#1 Se il tuo file originale ha spazi come delimitatori di colonna, la correzione potrebbe essere semplice. Quando selezioni File > Apri usa l'opzione Dati con anteprima e assicurati che sia Space che Spaces siano selezionati

Se avessi selezionato Dati, utilizzando le preferenze di importazione del testo , l'impostazione predefinita potrebbe essere Spazio. In tal caso, viene utilizzata la correzione tramite l'interfaccia utente Dati con Anteprima . Se si utilizza uno script, è necessario utilizzare l'istruzione Open nello script seguente.
#2 Se il tuo file originale ha tabulazioni come delimitatori di colonna, la correzione non è così semplice. Tramite l'interfaccia utente puoi utilizzare un editor di testo e utilizzare trova e sostituisci una scheda con spazi.Non ho trovato alcun metodo per specificare le schede nel caso in cui ci siano schede aggiuntive. Commento: a Schede opzione potrebbe essere un buon elemento della lista dei desideri o consentire all'utente di specificare più di un carattere come 0x090x09 o HexToChar("0909") per Altro o aggiungere un'opzione a Ignora delimitatori ripetuti . Se non puoi modificare il file, o non vuoi utilizzare l'editor di testo per sostituire ogni scheda con uno spazio, e se stai usando un PC Windows, puoi modificare il file JSL qui sotto cambiando i percorsi del file. Se la tua colonna Nome ha spazi, questo non funzionerà e uno script diverso che utilizza espressioni regolari può essere utilizzato per sostituire le schede duplicate con una singola scheda.
Se copi e incolli i dati nella tabella, dovresti usare la soluzione di Jim.
Se si dispone di maggiori dettagli sul file di input, è possibile fornire uno script/soluzione più utile.
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) );
Questo potrebbe essere fatto in vari modi usando JSL, tuttavia, supponendo che tu voglia farlo in modo interattivo, ecco come lo farei
- Vai a Tabelle==>Impila e impila le colonne 1 - 5 in una nuova tabella di dati
- Nella nuova tabella, fai clic con il pulsante destro del mouse su una delle celle mancanti e seleziona "Seleziona celle corrispondenti".
- Elimina le righe che contengono i valori mancanti
- Crea una nuova colonna, chiamandola "Colonna" e specifica nelle informazioni sulla colonna per la colonna per inizializzare i dati su "Dati di sequenza" con il valore From di 1 e il valore To di 5 (il numero di colonne che sono state impilate) e il valore Step a 4 (il numero di righe nella tabella dati originale)
- Ora vai su Tabelle==>Dividi e seleziona la colonna denominata "Colonna" come selezione Dividi per e la colonna denominata "Dati" come Colonna divisa.
- La nuova tabella di dati risultante dovrebbe consentire di eseguire un aggiornamento di Tables==> o semplicemente un taglia e incolla per copiare i nuovi risultati nella tabella di dati originale