안녕하세요,
일련의 중첩 된 for 루프를 한 번에 하나씩 실행하여 내부 for 루프가 외부 for 루프가 실행될 때마다 한 번씩 실행되도록하려고합니다.
좀 더 많은 문맥을주기 위해 나는 58 페이지 길이의 PDF 파일을 가지고있다. 모든 두 페이지는 텍스트 가져 오기 마법사를 사용하기 위해 새 테이블을 별도로 열어 개별 문서로 만듭니다 (29 개의 문서가 하나의 PDF에서 함께 샌드위치 처리됩니다). 또한 열 이름을 32 번째 줄에서 시작하고 각 두 페이지 문서의 33 번째 줄에서 데이터를 시작하도록하고 싶습니다.
이렇게하려면 텍스트 마법사 스크립트에서 열 이름 시작 및 데이터 시작에 루프를 중첩했습니다. 29 개 문서 각각의 열 이름 사이에 134 개의 라인이 있으며, 이후 29 개, 2 페이지 길이의 각 문서에서 데이터가 시작되는 134 개의 라인이 있습니다.
또한 전체 스크립트를 둘러싼 for 루프가 기본 파일을 29 번 열어서 후속 for 루프가 시작할 행을 선택하고 파일에서 각 문서 sandwhiched에 대한 표를 만듭니다.
Break 또는 Continue 명령을 사용하면 스크립트가 첫 번째 for 루프를 한 번 실행하고 다음 for 루프를 실행하여 한 번 실행하게 한 다음 각 루프를 한 번만 실행하는 스크립트를 계속 한 번 수행 한 후 다시 시작합니다. 파일을 읽고 for 루프의 다음 반복을 수행할까요? 또한 각각의 for 루프를 사용하는 동안 줄 수를 유지하려면 과거 반복을 기억하십시오.
고맙습니다,
매트
//opens text file using text wizard
for(i=1, i<=29, i++,
Open(
"C:\Users\file.txt",
columns(
New Column( "Parameters", Character, "Nominal" ),
New Column( "Results", Character, "Nominal" ),
New Column( "Units", Character, "Nominal" ),
New Column( "Uncertainty", Character, "Nominal" ),
New Column( "Spec", Character, "Nominal" ),
New Column( "Methods", Character, "Nominal" ),
New Column( "c000007", Character, "Nominal" ),
New Column( "c000008", Character, "Nominal" ),
New Column( "c000009", Character, "Nominal" ),
New Column( "c0000010", Character, "Nominal" ),
New Column( "c0000011", Character, "Nominal" ),
New Column( "c0000012", Character, "Nominal" ),
New Column( "c0000013", Character, "Nominal" ),
New Column( "c0000014", Character, "Nominal" ),
New Column( "c0000015", Character, "Nominal" ),
New Column( "c0000016", Character, "Nominal" ),
New Column( "c0000017", Character, "Nominal" ),
New Column( "c0000018", Numeric, "Continuous", Format( "Best", 10 ) )
),
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( 1 ),
Column Names Start(
for(q=1, q<=29, q++,
(32*q)+for(p=135, p<29, p++,
(show(p));
);
);
),
Data Starts(
for(t=1, t<=29, t++,
(33*t)+for(s=135, s<29, s++,
(show(s));
);
);
),
Lines To Read( "135" ),
Year Rule( "20xx" )
)
));이 같은 것을 시도해보십시오.
filename = Save Text File( "$temp\x.csv", "a,b,c
1,2,3
a,b,c
2,3,4
a,b,c
3,4,5
" );
dtlist = {};
For( i = 1, i <= 3, i += 1,
names = (i - 1) * 2 + 1;
data = names + 1;
dtlist[i] = Open(
filename,
columnNamesStart( names ),
DataStarts( data ),
Lines To Read( 1 )
);
dtlist[i] << setname( "segment" || Char( i ) );
);
JSL에서 이름이 설정된 세 개의 테이블
@MattP ,
귀하의 코드를 살펴 보았습니다. 그리고 여기 제가 알아 차 렸던 몇 가지 사항이 있습니다.

강조 표시된 섹션은 실제로 나에게별로 의미가 없습니다. 나는 당신이 그것을 시도하고자한다면 다른 접근법을 추천 할 것이다. for 루프를 실행하고 모든 데이터를 데이터 테이블로 읽도록하십시오. 필요한 것보다 더 많은 데이터를 읽는 것이 반 직관적 일 수는 있지만 코드의 효율성과 명확성을 고려할 때, 들어오는 데이터를 제한하려고 시도하지 않고 읽은 데이터를 후 처리하는 것이 훨씬 쉬울 것입니다 . 따라서 외부 루프를 유지하고 "Column"및 "Data"섹션에서 내부 루프를 제거하십시오. 데이터를 얻었 으면 샘플 데이터 테이블을보고 원하는 것을 필터링하는 방법을 살펴 보겠습니다. 도움을 청하다.