Quería importar un archivo txt a JMP, pero el texto no está perfectamente alineado. Entonces quiero eliminar las celdas vacías. Probé muchas formas diferentes, pero parece que JMP solo puede eliminar una columna/fila completa. ¿Hay alguna forma de pasar del formato de entrada al formato de salida? Gracias.
Aporte:
| Nombre | columna1 | columna2 | columna3 | columna4 | columna5 |
| emma | | 38 | 33208 | 30630 | 31360 |
| María | | 38 | 48263 | 44694 | 45753 |
| Lisa | 38 | 45961 | 42755 | 43766 | 43887 |
| David | 38 | 32799 | 30643 | 31365 | 31452 |
Producción:
Nombre | columna1 | columna2 | columna3 | columna4 | columna5 |
emma | 38 | 33208 | 30630 | 31360 | 30350 |
María | 38 | 48263 | 44694 | 45753 | 47263 |
Lisa | 38 | 45961 | 42755 | 43766 | 43887 |
David | 38 | 32799 | 30643 | 31365 | 31452 |
¡Gracias! ¡Funcionó muy bien! Esta pieza es crucial para lo que estoy trabajando actualmente, y es realmente de gran ayuda.
Si su archivo no es extremadamente grande y su versión de JMP incluye la función de caracteres Collapse Whitespace();
Aquí hay una solución más simple usando 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 proporcionó una solución sobre cómo solucionar el problema una vez que se importa el archivo de texto. Explicaré dos opciones, cada una depende de su archivo original.
#1 Si su archivo original tiene espacios como delimitadores de columna, la solución podría ser fácil. cuando seleccionas Archivo >Abrir usa la opción Datos con vista previa y asegúrese de que tanto Espacio como Espacios estén seleccionados

Si hubiera seleccionado Datos, utilizando preferencias de importación de texto , su valor predeterminado podría ser Espacio. Si ese es el caso, la solución a través de la interfaz de usuario es el uso Datos con vista previa . Si está utilizando una secuencia de comandos, se debe utilizar la declaración Open en la secuencia de comandos a continuación.
#2 Si su archivo original tiene pestañas como delimitadores de columna, la solución no es tan fácil. A través de la interfaz de usuario, puede usar un editor de texto y usar buscar y reemplazar una pestaña con espacios.No encontré ningún método para especificar pestañas en caso de que haya pestañas adicionales. Comentario: un Pestañas opción podría ser un buen elemento de la lista de deseos, o permitir que el usuario especifique más de un carácter, como 0x090x09 o HexToChar ("0909") para Otro o agregar una opción a Ignorar delimitadores repetidos . Si no puede editar el archivo, o no quiere usar el editor de texto para reemplazar cada pestaña con un espacio, y si está usando una PC con Windows, puede modificar el archivo JSL a continuación cambiando las rutas del archivo. Si su columna Nombre tiene espacios, esto no funcionará y se puede usar un script diferente que use expresiones regulares para reemplazar las pestañas duplicadas con una sola pestaña.
Si copió y pegó los datos en la tabla, entonces debe usar la solución de Jim.
Si tiene más detalles sobre el archivo de entrada, se puede proporcionar una secuencia de comandos/solución más útil.
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) );
Esto se puede hacer de varias maneras usando JSL, sin embargo, suponiendo que quieras hacerlo de forma interactiva, así es como lo haría.
- Vaya a Tablas ==> Apilar y apilar las columnas 1 - 5 en una nueva tabla de datos
- En la nueva tabla, haga clic con el botón derecho en una de las celdas que faltan y seleccione "Seleccionar celdas coincidentes".
- Eliminar las filas que tienen los valores faltantes
- Cree una nueva columna, llámela "Columna" y especifique en la Información de columna para que la columna Inicialice los datos en "Datos de secuencia" con el valor Desde 1 y Hasta el valor 5 (la cantidad de columnas que se apilaron) y el valor Paso a 4 (el número de filas en la tabla de datos original)
- Ahora vaya a Tablas==>Dividir y seleccione la columna denominada "Columna" como la selección Dividir por, y la columna denominada "Datos" como Columna dividida.
- La nueva tabla de datos resultante debería permitirle hacer Tables==>Update o simplemente Cortar y Pegar para copiar los nuevos resultados a la tabla de datos original.