여러분 안녕하세요,
첨부 파일과 비슷한 플랫 .txt 파일을 내보낼 프로그램이 있습니다. 첫 번째 열을 가져 와서 새 값을 만들고 그 값을 채울 스크립트를 작성하고 싶습니다. 사이트에서 발견 한 JSL 구현에 실패했습니다.
JSL 스크립트 만 사용하여 "Example Before"에서 "Column 1"을 가져 와서 세 개의 새 열로 나누고 해당 열의 인스턴스에 따라 레이블을 지정하고 다음 유효한 값이 될 때까지 채 웁니다. 예 : 이후 예와 같습니다.
예전 예

예 :

질문 : 텍스트의 중첩 된 구조가 XML을 연상케합니다. 태그를 삭제하는 것과 같은 편집을 한 후 원본 텍스트 또는 일부 버전입니까?
이것은 제가 작업 한 플랫 파일을 모방 한 것입니다. 우리는 .txt 파일을 내보내는 소프트웨어 (HAScientific, SLIM)를 사용하지 않습니다. 그래서 실제로 어떻게 데이터가 원래 구조화되어 있는지 확실하지 않습니다. 나는 그 SQL을 기반으로, 그성에 열쇠가 없다고 생각합니다. 이것이 좌절감을 느끼는 동안, 필자가 생각해 낸 문제는 텍스트 파일을 읽고 지우는 JSL 스크립트입니다.
@ 다니엘 비버 첨부 된 스크립트는 중첩 된 XML과 같은 구조로 작성됩니다. 변경 될 때까지 동일하게 유지되는 값을 가져와 새 행을 만들고 시간이 변경되면 결과를 작성합니다. 파일의 모든 인스턴스를 처리 할 수는 없지만이 예제 텍스트 파일에 대해 원하는 작업을 수행 할 수 있습니다.
실행할 텍스트 파일의 경로를 변경해야합니다.
Names Default to Here(1);
dt0 = Open(
"C:\Users\_xx\Downloads\Example Before.txt",
Table Contains Column Headers (1),
End of Line ( CRLF, CR, LF),
End of Field (comma, CSV(0)),
Column Names Start(1));
//create a new table
dt = New Table("Restruct",
New Column( "Column 1", Character),
New Column( "Meta Data", Character),
New Column( "Data", Numeric),
New Column( "Project", Character),
New Column( "Time Point", Character),
New Column( "Condition", Character) );
//Initialize values
md="";
dv=empty();
tp="";
pj="";
cd="";
crow = 0;
//new rows will be created for new time point
//this might not cover all files, but matches your sample text data.
for(i=1,i<=nrow(dt0),i++,
cval = dt0:Column 1[i];
If(cval =="", Continue());
if(starts with(cval,"PT"), pj=cval);
if(contains(cval,"/"), cd = cval);
if(contains(cval,"Initial") | contains(cval,"month"),
tp = cval;
if(trim(cval)=="Initial", cd = cval);
md = dt0:Meta Data[i];
dv = dt0:Data[i];
dt << add rows(1, At End);
crow++;
dt:Column 1[crow] = cval;
dt:Meta Data[crow] = md;
dt:Data[crow] = dv;
dt:Time Point[crow] = tp;
dt:Project[crow] = pj;
dt:Condition[crow] = cd;
); // end if
); // end for
이것은 내가 문제를 해결하려고 생각했던 것보다 상당히 다른 방식입니다. 나는 그것이 약간의 땜질과 함께 일해야한다고 생각한다. 도와 주셔서 감사합니다.