웹 페이지에서 다운로드한 txt 파일, 이 파일에는 데이터가 있습니다. JSL을 사용하여 이러한 txt 파일을 테이블 형식 데이터로 처리하는 방법은 무엇입니까?
JSON으로 처리할 수 없습니다. 전문가에게 감사합니다!

// the U.txt file has 2 extra characters at the
// start and 3 extra characters at the end.
// visual inspection is the only way I know to
// figure that out.
// using JMP 15's json wizard
x = Load Text File( "E:/U.txt" );
x = Substr( x, 3, Length( x ) - 5 );
Open( Char To Blob( x ), jsonwizard( 0 ) );
// using JMP 14's basic json support
x = Load Text File( "E:/U.txt" );
x = Substr( x, 3, Length( x ) - 5 );
Open( Char To Blob( x ), "json" );
JMP 15가 있는 경우 마법사를 대화식으로 사용할 수도 있습니다(GUI를 보려면 JsonWizard(1) 사용).여전히 추가 문자를 제거하는 데 도움이 필요합니다.위의 JSL은 txt를 x로 로드하고 substr()을 사용하여 2개 및 3개의 문자를 제거한 다음 데이터를 디스크에 다시 쓰지 않고 Blob을 통해 open()에 전달합니다. 디스크에 다시 쓰는 경우 확장자를 .json으로 변경할 수도 있습니다.
JMP 15's wizard also guesses the datatypes better in this exampleJMP 15의 마법사는 또한 이 예에서 데이터 유형을 더 잘 추측합니다.
@davidbarbour
아니, 당신 말이 맞아요. 나는 내 접근 방식을 기반으로 스크립트를 작성하는 데 2시간을 보냈고 많은 지루한 문제에 부딪쳤습니다. 지금은 더 이상 시간이 없습니다.
안녕하세요 lwx228,
아래에는 데이터를 가져오고, 적절하게 재코딩하고, 텍스트를 열에 넣고, 쌓고, 분할하여 최종 테이블을 가져오는 스크립트가 있습니다.
이것은 꽤 이상한 데이터 형식이므로 몇 가지 설명이 있습니다.
- 구분 기호가 일치하지 않으며 일반적인 txt 파일과 비교됩니다.
- 쉼표는 필드와 구분 기호로 사용되며,
- 따옴표도 사용되지만 각 요소에는 사용되지 않습니다.
- 괄호는 여러 가지 방법으로 사용됩니다
- 누락된 값에 대한 'null' 문이 있는 경우도 있지만 그렇지 않은 경우도 있습니다!
- 열 이름이 있는 첫 번째 행이 없으며 데이터 필드 내에 있습니다. 따라서 이를 추출하고 스택/분할 작업을 수행하여 분석에 필요한 열을 가져와야 합니다. )
- 따라서 기본 설정은 작동하지 않습니다. 행당 잘못된 수의 필드가 표시되기 때문입니다!
- 가장 좋은 방법은 행당 전체 문자열을 읽고 나머지는 재코딩 및 열 유틸리티를 사용하여 JMP에서 수행하는 것입니다. 유사한 파일에서도 사용할 수 있기를 바랍니다.
- 이러한 것들을 스크립팅하려면 각 단계를 테스트해야 하며 단계가 괜찮은 것 같으면 스크립트를 스크립트 창에 저장/복사하고 다음 단계를 수행합니다.
- 그래서 아래 스크립트가 만들어졌습니다.
Names Default to Here(1);
//Open your txt file using special settings, like } as end of line, uncheck column names, data starts row 1, ...
dt = Open(
"YOURPATH\U.txt", // exchange YOURPATH with your path to the file
columns( New Column( "c000001", Character, "Nominal" ) ),
Import Settings(
End Of Line( Semicolon, Other( "}" ) ),
End Of Field( 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" )
)
);
// Now you have one column with in each row all information after "name"
// Remove last two lines as they are just filled with brackets
dt << Clear Selected Row States;
m = matrix({N Rows(dt)-1, N Rows(dt)});
dt << Select Rows( m);
wait(2);
dt << Delete Rows();
// Best to use Recode and Column utility functions to seperate all information
dt << New Column("recoded","Character",Formula(Recode(
:c000001,
{Substitute( _rcNow, ",{", "" ), Substitute( _rcNow, "({[{", "" ),
Substitute( _rcNow, ":", "," ), Substitute( _rcNow, "\!",\!"", ";" ),
Substitute( _rcNow, ";;", ";null;" ),
Substitute( _rcNow, "\!"", "" ), Substitute( _rcNow, ",null,", ";null;" ),
Substitute( _rcNow, ",null", ";null" )
}
)));
// Get all text seperated by ; in seperated columns
dt << Text To Columns( delimiter( ";" ), columns( :recoded ) );
dt << Delete Columns(Column(1),Column(2));
// Now you have to stack the data appropriately
colNames = dt << Get Column Names();
dt_stack = dt << Stack(
Columns(colNames),
Source Label Column( "ColName" ),
Stacked Data Column( "Data" ),
Number of Series( 2 )
);
dt_stack << Delete Columns(1,3);
// Just to Split it again to get the columns with the correct names as well the data respectively
dt_final = dt_stack << Split(
Split By( :Data ),
Split( :Data 2 ),
Sort by Column Property
);
// Close data tables you do not need anymore
close(dt_stack, NoSave);
close(dt, NoSave);
// Finally you get an alphabetic order and all data is in character. So you now need to change this appropriately.
이를 진행하는 것은 즐거웠지만 위에서 설명한 이상한 데이터 문제를 극복하는 데 시간이 좀 걸렸습니다. 그러나 내장된 스크립트와 수식으로 인해 그리 많지는 않습니다. 
추가 팁: recode 수식을 얻으려면 recode를 사용하고 수식 열로 저장하고 수식 편집기를 살펴보십시오.
최상의,
남자 이름
필요한 데이터 열(예: "name", "cname" 등)이 있는 데이터 테이블을 만듭니다. 이 데이터의 시작 부분에는 외부 펜스 "({[" 및 "]})"가 있습니다. 간단한 하위 목록 목록을 갖도록 "{" 및 "}"를 대체합니다. 그런 다음 목록을 반복하고 하위 목록을 한 번에 하나씩 처리합니다. 그만큼 변수, 값 쌍은 간단한 순서로 되어 있으므로 한 번에 하나의 행을 데이터 테이블에 추가할 수 있습니다.
지금은 이 접근 방식을 시연하기 위한 간단한 스크립트를 작성할 시간이 없습니다.