디렉토리의 파일에 대한 정규식안녕,
정규 표현식("dat"로 시작하는 파일)을 기반으로 파일을 여는 스크립트를 생성하려고 합니다. 내 코드가 아래에 나열되어 있지만 작동하지 않는 것 같습니다. 목록에서 정규식을 사용할 때 수행해야 할 특별한 작업이 있습니까?
dir = 디렉토리 선택();
파일 = 디렉토리(dir)의 파일;
datafile = regex(files, "(^dat.*)","\1");
open(dir||데이터파일);
Re: 디렉토리의 파일에 대한 정규식이 경우가 명시된 것처럼 간단하다면(모든 대상 파일 이름이 "dat"로 시작함) 두 방법 중 하나가 작동하고 둘 다 사용하기 쉽습니다. (일치하는 파일 이름을 찾는 방법 중 하나는 문자 함수를 기반으로 하고 다른 방법은 정규식을 기반으로 합니다.) 실제로 사례가 간단하지 않거나 시간이 지남에 따라 더 복잡해지면 첫 번째 접근 방식이 더 어려워지거나 심지어 더 복잡해질 수 있습니다. 불가능한. 이 경우 정규 표현식이 더 나은 접근 방식이 될 것입니다.
(JMP는 패턴을 만들고 패턴을 사용하는 기능 전체를 갖춘 텍스트의 '패턴'도 정의합니다.)
나는 정규 표현식이 실망스럽다고 생각하지 않습니다. 정규식의 구문은 매우 간단합니다.실제 텍스트에서 대상 패턴을 찾기 위해 정규식이나 유사한 방법을 사용하는 것은 실망스러운 일이라고 생각합니다. 하지만 이는 도구보다는 구조화되지 않은 데이터의 혼란 때문입니다. 텍스트를 분석해야 한다면 정규식에 대한 지식과 기술이 중요합니다.
Re: 디렉토리의 파일에 대한 정규식이전 솔루션에 추가하여 Open() 함수를 사용하여 데이터 테이블을 가져온 후 작업하고 싶을 수도 있습니다. 다른 목록의 데이터 테이블 참조를 캡처하겠습니다. 두 번째 솔루션을 예로 사용하겠지만 분명히 첫 번째 솔루션에서도 동일한 작업이 가능합니다.
Names Default to Here( 1 );
dir = Pick Directory();
files = Files in Directory( dir );
data files = List();
For( i = 1, i <= N Items( files ), i++,
If( !Is Missing( Regex( files[i], "^dat.*" ) ),
ref = Open(dir||files[i]);
Insert Into( data files, ref );
);
);
Re: 디렉토리의 파일에 대한 정규식구현하는 한 가지 방법은 다음과 같습니다. @cwillden regex()를 사용한 솔루션:
Names default to here( 1 );
dir = pick directory();
files = files in directory(dir);
for(i=1, i <= N Items(files), i++,
If(!Is missing(regex(files[i],"^dat.*")), //if first 3 letters of file name are "dat"
open(dir||files[i])
)
);
Re: 디렉토리의 파일에 대한 정규식나는 항상 정규 표현식이 답답하다고 생각했기 때문에 가능한 한 정규 표현식을 피합니다.
확실히 틀릴 수도 있지만 목록의 모든 항목에 적용하는 것이 의미가 없다고 생각합니다.가장 쉬운 해결책은 아마도 파일을 반복하여 "dat"로 시작하지 않는 파일을 버리는 것입니다. 다음과 같은 것을 사용합니다 :
for(i=1, i <= N Items(files), i++,
If(Substr(files[i],1,3)=="dat", //if first 3 letters of file name are "dat"
open(dir||files[i])
)
);