Ich wollte eine TXT-Datei in JMP importieren, aber der Text ist nicht perfekt ausgerichtet. Ich möchte also die leeren Zellen löschen. Ich habe viele verschiedene Möglichkeiten ausprobiert, aber es scheint, dass JMP nur eine ganze Spalte/Zeile löschen kann. Gibt es eine Möglichkeit, vom Eingabeformat zum Ausgabeformat zu gelangen? Danke schön.
Eingang:
| Name | Spalte1 | Spalte2 | Spalte3 | Spalte4 | Spalte5 |
| Emma | | 38 | 33208 | 30630 | 31360 |
| Maria | | 38 | 48263 | 44694 | 45753 |
| Lisa | 38 | 45961 | 42755 | 43766 | 43887 |
| David | 38 | 32799 | 30643 | 31365 | 31452 |
Ausgang:
Name | Spalte1 | Spalte2 | Spalte3 | Spalte4 | Spalte5 |
Emma | 38 | 33208 | 30630 | 31360 | 30350 |
Maria | 38 | 48263 | 44694 | 45753 | 47263 |
Lisa | 38 | 45961 | 42755 | 43766 | 43887 |
David | 38 | 32799 | 30643 | 31365 | 31452 |
Danke schön! Es hat super funktioniert! Dieses Stück ist von entscheidender Bedeutung für die Sache, an der ich gerade arbeite, und es ist wirklich eine große Hilfe.
Wenn Ihre Datei nicht sehr groß ist und Ihre JMP-Version die Zeichenfunktion Collapse Whitespace();
Hier ist eine einfachere Lösung mit 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 lieferte eine Lösung, wie das Problem behoben werden kann, sobald die Textdatei importiert wurde. Ich werde zwei Optionen erläutern, die jeweils von Ihrer Originaldatei abhängen.
#1 Wenn Ihre Originaldatei Leerzeichen als Spaltentrennzeichen enthält, könnte die Lösung einfach sein. Wenn Sie auswählen Datei > Öffnen nutzen Sie die Option Daten mit Vorschau und stellen Sie sicher, dass sowohl „Space“ als auch „Spaces“ ausgewählt sind

Wenn Sie ausgewählt hätten Daten mithilfe der Textimporteinstellungen , Ihr Standardwert könnte Space sein. Wenn dies der Fall ist, erfolgt die Fehlerbehebung über die Benutzeroberfläche Daten mit Vorschau . Wenn Sie ein Skript verwenden, sollte die Open-Anweisung im folgenden Skript verwendet werden.
#2 Wenn Ihre Originaldatei Tabulatoren als Spaltentrennzeichen hat, ist die Lösung nicht so einfach. Über die Benutzeroberfläche können Sie einen Texteditor verwenden und einen Tabulator durch Leerzeichen ersetzen.Ich habe keine Methode zum Angeben von Tabs gefunden, falls es zusätzliche Tabs gibt. Kommentar: a Tabs Die Option könnte ein guter Wunschlisteneintrag sein oder es dem Benutzer ermöglichen, mehr als ein Zeichen anzugeben, z. B. 0x090x09 oder HexToChar("0909") für Andere oder eine Option hinzufügen Ignorieren Sie wiederholte Trennzeichen . Wenn Sie die Datei nicht bearbeiten können oder nicht den Texteditor verwenden möchten, um jedes Tab durch ein Leerzeichen zu ersetzen, und wenn Sie einen Windows-PC verwenden, können Sie die JSL-Datei unten ändern, indem Sie die Dateipfade ändern. Wenn Ihre Namensspalte Leerzeichen enthält, funktioniert dies nicht und ein anderes Skript mit regulären Ausdrücken kann verwendet werden, um doppelte Tabulatoren durch einen einzelnen Tabulator zu ersetzen.
Wenn Sie die Daten kopieren und in die Tabelle einfügen, sollten Sie Jims Lösung verwenden.
Wenn Sie weitere Details zur Eingabedatei haben, kann ein nützlicheres Skript/eine nützlichere Lösung bereitgestellt werden.
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) );
Dies kann mithilfe von JSL auf verschiedene Arten erfolgen. Wenn Sie dies jedoch interaktiv tun möchten, würde ich es wie folgt tun
- Gehen Sie zu Tabellen==>Stapel und stapeln Sie die Spalten 1–5 in eine neue Datentabelle
- Klicken Sie in der neuen Tabelle mit der rechten Maustaste auf eine der fehlenden Zellen und wählen Sie „Übereinstimmende Zellen auswählen“.
- Löschen Sie die Zeilen mit den fehlenden Werten
- Erstellen Sie eine neue Spalte, nennen Sie sie „Spalte“ und geben Sie in den Spalteninformationen für die Spalte an, dass Daten auf „Sequenzdaten“ initialisiert werden sollen, mit dem Von-Wert von 1 und dem Bis-Wert von 5 (Anzahl der gestapelten Spalten) und dem Schrittwert auf 4 (die Anzahl der Zeilen in der Originaldatentabelle)
- Gehen Sie nun zu „Tabellen==>Teilen“ und wählen Sie die Spalte „Spalte“ als „Teilen nach“-Auswahl und die Spalte „Daten“ als „Teilen-Spalte“ aus.
- Die resultierende neue Datentabelle sollte es Ihnen ermöglichen, entweder ein Tables==>Update oder nur ein Ausschneiden und Einfügen durchzuführen, um die neuen Ergebnisse zurück in die ursprüngliche Datentabelle zu kopieren