txt 파일을 JMP로 가져오고 싶었지만 텍스트가 완벽하게 정렬되지 않았습니다. 그래서 빈 셀을 삭제하고 싶습니다. 여러 가지 방법을 시도했지만 JMP는 전체 열/행만 삭제할 수 있는 것 같습니다. 입력에서 출력 형식으로 전환하는 방법이 있습니까? 감사합니다.
입력:
| 이름 | 열1 | 열2 | 열3 | 열4 | 열5 |
| 엠마 | | 38 | 33208 | 30630 | 31360 |
| 메리 | | 38 | 48263 | 44694 | 45753 |
| 리사 | 38 | 45961 | 42755 | 43766 | 43887 |
| 다윗 | 38 | 32799 | 30643 | 31365 | 31452 |
산출:
이름 | 열1 | 열2 | 열3 | 열4 | 열5 |
엠마 | 38 | 33208 | 30630 | 31360 | 30350 |
메리 | 38 | 48263 | 44694 | 45753 | 47263 |
리사 | 38 | 45961 | 42755 | 43766 | 43887 |
다윗 | 38 | 32799 | 30643 | 31365 | 31452 |
감사합니다! 훌륭하게 작동했습니다! 이 부분은 제가 현재 작업하고 있는 작업에 매우 중요하며 정말 큰 도움이 됩니다.
파일이 매우 크지 않고 JMP 버전에 문자 기능 Collapse Whitespace()가 포함되어 있는 경우;
다음은 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은 텍스트 파일을 가져온 후 문제를 해결하는 방법에 대한 솔루션을 제공했습니다. 두 가지 옵션을 설명하겠습니다. 각각은 원본 파일에 따라 다릅니다.
#1 원본 파일에 열 구분 기호로 공백이 있으면 쉽게 수정할 수 있습니다. 선택할 때 파일 >열기 옵션을 사용 미리보기가 있는 데이터 공간과 공간이 모두 선택되어 있는지 확인하십시오.

선택했다면 데이터, 텍스트 가져오기 기본 설정 사용 , 기본값은 Space일 수 있습니다. 이 경우 UI를 통한 수정은 사용입니다. 미리보기가 있는 데이터 . 스크립트를 사용하는 경우 아래 스크립트의 Open 문을 사용해야 합니다.
#2 원본 파일에 열 구분 기호로 탭이 있는 경우 수정이 쉽지 않습니다. UI를 통해 텍스트 편집기를 사용하고 찾기를 사용하여 탭을 공백으로 바꿀 수 있습니다.추가 탭이 있는 경우 탭을 지정하는 방법을 찾지 못했습니다. 코멘트: 탭 옵션은 좋은 위시리스트 항목이거나 사용자가 0x090x09 또는 HexToChar("0909")와 같은 둘 이상의 문자를 지정하도록 허용할 수 있습니다. 다른 또는 옵션 추가 반복되는 구분 기호 무시 . 파일을 편집할 수 없거나 텍스트 편집기를 사용하여 각 탭을 공백으로 대체하는 것을 원하지 않으며 Windows PC를 사용하는 경우 파일 경로를 변경하여 아래 JSL 파일을 수정할 수 있습니다. 이름 열에 공백이 있으면 작동하지 않으며 정규식을 사용하는 다른 스크립트를 사용하여 중복 탭을 단일 탭으로 바꿀 수 있습니다.
데이터를 복사하여 테이블에 붙여넣은 경우 Jim의 솔루션을 사용해야 합니다.
입력 파일에 대한 자세한 정보가 있으면 더 유용한 스크립트/솔루션을 제공할 수 있습니다.
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) );
이것은 JSL을 사용하여 다양한 방법으로 수행할 수 있지만 대화식으로 수행하려는 경우 다음과 같이 수행합니다.
- 테이블로 이동==>열 1 - 5를 새 데이터 테이블에 쌓고 쌓기
- 새 테이블에서 누락된 셀 중 하나를 마우스 오른쪽 버튼으로 클릭하고 "일치하는 셀 선택"을 선택합니다.
- 누락된 값이 있는 행을 삭제합니다.
- "Column"이라고 하는 새 열을 만들고 열에 대한 열 정보에서 데이터를 From 값 1, To 값 5(누적된 열 수) 및 Step 값을 사용하여 "시퀀스 데이터"로 초기화하도록 지정합니다. ~ 4(원본 데이터 테이블의 행 수)
- 이제 Tables==>Split으로 이동하여 Split By 선택으로 "Column"이라는 열을 선택하고 Split Column으로 "Data"라는 열을 선택합니다.
- 결과 새 데이터 테이블을 사용하면 테이블==>업데이트를 수행하거나 잘라내기 및 붙여넣기를 수행하여 새 결과를 원래 데이터 테이블로 다시 복사할 수 있습니다.