소스 디렉토리의 파일 제목에 따라 로그 파일 그룹을 컴파일하는 스크립트가 있습니다. 이 스크립트는 주소 테이블에서 Lot ID를 읽고 이를 사용하여 경로 디렉토리 "dir"을 검색하고 대상 파일을 컴파일합니다. 이 스크립트를 재활용하여 스크립트가 사용 가능한 파일의 텍스트 내부를 살펴보고 Lot ID가 표시되는지 확인하고 그에 따라 컴파일하도록 해야 합니다. 온라인에서 이에 대한 참조를 몇 개 보았지만 모든 파일을 열어서 판단하는 데 시간이 오래 걸릴 것 같습니다. 아이디어 감사합니다.
Names Default To Here( 1 );
Clear Globals();
lst = Column( "lot" ) << Get Values;
n = N Items( lst );
dir = "\\Source_Directory\";
myfiles = {};
files = Files In Directory( dir, Recursive );
n_getfiles = N Items( files );
filteredFiles = {};
While( (testname = Remove From( files, 1 )) != {},
Relevant = Char( Regex( testname[1], "/4(\d{6})R", "4\1" ) );
If( Contains( testname[1], Relevant ),
Insert Into( filteredFiles, testname, 1 );
);
);
Show( filteredFiles );
t_filterfiles = t4 - t3;
n_filterfiles = N Items( filteredFiles );
Show( t_getfiles, n_getfiles, t_filterfiles, n_filterfiles );
Show( filteredFiles );
compiler_function = Function( {lot_number},
Try(
use1 = lot_number;
LotID = Char( use1 );
For( i = 1, i <= N Items( filteredFiles ), i++,
If( Contains( filteredFiles[i], LotID ),
Insert Into( myFiles, filteredFiles[i] ))
);
final_files = myfiles;
)
);
For( l = 1, l <= n, l++, //Show(l);
compiler_function( lst[l] )
);
i = 1;
dtjoin = Open(
dir || myfiles[i],
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Tab, Comma, CSV( 1 ) ),
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( 1 ),
First Named Column( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
);
);
Wait( 0 );
Column( 1 ) << set name( "Column 1" );
dtjoin << set name( "Joined1" );
dtjoin << Add Rows( 1, after( N Rows( dtjoin ) ) );
For( i = N Rows( dtjoin ), i <= N Rows( dtjoin ), i++,
:Column 1[i] = "File 1"
);
i = 2;
For( i = 2, i <= N Items( myfiles ), i++,
dt = Open(
dir || myfiles[i],
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Tab, Comma, CSV( 1 ) ),
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( 1 ),
First Named Column( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
);
);
Column( 1 ) << set name( "Column 1" );
dt << Add Rows( 1, after( N Rows( dt ) ) );
For( j = N Rows( dt ), j <= N Rows( dt ), j++,
:Column 1[j] = ("File " || Char( i ))
);
dtjoin = dtjoin << Concatenate(
dt, output table name( "Joined" || Char( i ) ),
);
Close( dt, nosave );
Close( "Joined" || Char( i - 1 ), nosave );
Wait( 0.1 );
);
dtjoin << set name( " Mask Data" );얼마나 큰 파일이 있나요? 몇 개의 파일이 있나요? ID는 파일이나 특정 위치/줄의 어디에나 있을 수 있나요? 무엇을 시도해 보셨나요(예: Load Text File() )?
파일은 ~25kB, 300-400줄 길이로 나오고 파일 수는 다를 수 있으며 최악의 경우 100개일 수도 있습니다. 제가 고려한 모든 것은 관련성을 결정하기 위해 각 파일을 열어야 했을 것입니다. 저는 그런 식으로 쓰지 않았고 데이터가 도착하기 전에 만료될 수 있습니다. Load Text File()이 흥미로워 보입니다. 제가 그것을 건드릴 것입니다.
여러 파일 가져오기가 도움이 될 수 있는데, CSV를 가져와서 쌓거나 처리되지 않은 텍스트를 파일당 행으로 로드하는 것입니다. GUI로 놀다가 마음에 드는 것이 있으면 스크립트를 저장합니다. 파일 타임스탬프를 사용할 수 있다면 거기에도 도움이 될 것입니다.