파일 열기(파일 이름에서 문자 조회)모두,
사용자 입력을 기반으로 파일 이름의 문자를 검색하여 폴더에 있는 파일을 열려고 합니다.
/* Input values in 3 columns by user. eg of file name: ABC_12_XYZ. User will input ABC in 1st column, 12 in second col and XYZ in 3rd column. all three should match in a row for selecting the file. There could be 100's of files (unique name) in the folder. User will input all that he wants to select from folder into input file. The file name search is limited to 10 characters from beginning of file name. The code is getting stuck somewhere in loop*/
//Script ------
Retrieve = Open( "C:\*\inputfile.jmp" );
x = Column( Retrieve, "Col1" ) << Get Values;
y = Column( Retrieve, "Col2" ) << Get Values;
z = Column( Retrieve, "Col3" ) << Get Values;
// location of files which needs to be read from a folder based on user inputs.
Set Default Directory("C:\test\");
Close( Retrieve, NoSave );
Col1_search = 1;
Col2_search = 1;
Count = 0;
For( i = 1, i <= N Items( files ), i++,
For( j = 1, j <= N Items( z ), j++,
If( Contains( files[i], z[j] ),
If( Col1_search == 1,
If( (Contains( files[i], z[j] ) & Contains( Left( files[i], 10 ), x[j] )) > 0,
If( Col2_Search == 1,
If(
((Contains( files[i], z[j] ) & Contains( Left( files[i], 10 ), x[j] )) > 0) & (Contains( Left( files[i], 10 ), y[j] ) > (Contains( Left( files[i], 10 ), x[j] ))),
Open( files[i] );
Count++;
),
Open( files[i] );
If( Count == N Items( z ),
Break();
);
)
)
),
Open( files[i] )
)
);
);
openDTs = {};Re: 파일 열기(파일 이름에서 문자 조회)@우데이
문제를 파악할 수 있습니다. 소스는 18자이고 패턴은 전체 문자열입니다.
아래와 같이 모든 파일에 대해 입력 파일 조회를 수행하기 위해 루프를 하나 더 추가했습니다.
귀하의 빠른 응답에 감사드립니다!
감사해요!
을 위한 ( 나 = 1 , 나 <= N개 품목 ( 파일 ) , 나 ++,
을 위한 ( 제이 = 1 , 제이 <= N개 품목 ( 엑스 ) , 제이 ++,
만약에 ( ! 누락 ( 정규식 ( 하위 문자열 ( 파일 [ 나 ] , 1 , 18 ) , 숯 ( 엑스 [ 제이 ] || "_" || 와이 [ 제이 ] || "_" || 지 [ 제이 ] ) ) ) ,
열려 있는 ( 테스트 디렉터리 || "\" || 파일 [ 나 ] ) ;
부서지다 () ;
) ;,
)
) ;
Re: 파일 열기(파일 이름에서 문자 조회)dt = Open( "$SAMPLE_DATA/Cities.jmp" ); // Open Sample Data
dt << Select Where(!IsMissing(Regex(Char(:city),"ALB")));
"포함" 기능을 사용할 필요가 없습니다. 위에 표시된 예를 살펴보세요. 파일 이름 중 18자를 검색하려면 Substr 함수를 사용하여 추출해야 합니다.
dt = Open( "$SAMPLE_DATA/Cities.jmp" ); // Open Sample Data
dt << Select Where(!IsMissing(Regex(Char(:city),Substr("ALBANY",1,3))));
Re: 파일 열기(파일 이름에서 문자 조회)다음은 로그 사본입니다.
다음 스크립트에서는 /*###*/로 표시된 오류가 있습니다.
For( i = 1, i <= N 항목( 파일 ), i++,
만약에(
!누락(
정규식/*###*/(문자(
엑스 || /*###*/"_" || /*###*/y || /*###*/"_" || /*###*/지/*###*/
), 파일[i])
),
열기( TestDir || "\" || 파일[i] )
)
)
내가 포함을 사용하는 이유는 길이가 40자일 수 있는 파일 이름에서 18자를 찾기 위해서입니다.
내가 제대로 하고 있는지 잘 모르겠습니다.
Re: 파일 열기(파일 이름에서 문자 조회)@CG ,
오류가 무엇인지 공유할 수 있나요? 로그 사본이요?
또한 왜 Contains 를 추가하는지 따르지 않습니다.
두 번째 인수는 일치시키려는 용어여야 합니다.
따라서 귀하의 이름을 찾으려고 한다면 다음과 같습니다.
If (!IsMissing(Regex(Char(x || "_" || y || "_"||z),"CG")),
Re: 파일 열기(파일 이름에서 문자 조회)파일 이름에서 첫 번째 18자를 찾고 있어요
아래 루프를 수정하고 파일 이름 x_y_z1234에 대해 z까지 18자를 찾는 조건을 추가했습니다.
~을 위한 ( 나 = 1 , 나 <= N개 품목 ( 파일 ) , 나 ++,
만약에 ( ! 누락 ( 정규식 ( 숯 ( 엑스 || "_" || 와이 || "_" || 지 ) , 포함 ( 왼쪽 ( 파일 [ 나 ]) , 18 )) ,
열려 있는 ( 테스트 디렉터리 || "\" || 파일 [ 나 ]) ;
) ,
) ;
) ;
하지만 여전히 오류가 발생합니다.
For( i = 1, i <= N 항목( 파일 ), i++,
If/*###*/(누락됨(
Regex( Char( x || "_" || y || "_" || z ), Contains( Left( Files[i] ), 18 ) ),
열기( TestDir || "\" || 파일[i] )
))
)
Re: 파일 열기(파일 이름에서 문자 조회)@CG ,
귀하의 경우 파일 형식은 항상 ABC_12_XYZ(예: x_y_z)라고 가정하는 것이 공평합니까? 그렇다면 대안적이고 간단한 방법은 다음과 같습니다.
Retrieve = Open( "C:\*\inputfile.jmp" );
x = Column( Retrieve, "Col1" ) << Get Values;
y = Column( Retrieve, "Col2" ) << Get Values;
z = Column( Retrieve, "Col3" ) << Get Values;
Close(Retrieve,"No Save");
TestDir = "C:\test\";
Files = Files In Directory(TestDir); // Returns a list of files in the directory
for(i = 1, i <= N Items(Files), i++,
If(!IsMissing(Regex(Char(x || "_" || y || "_"||z),Files[i])),
Open(TestDir ||"\" || Files[i]);
);
);