여러 파일 가져오기, 파일 필터링여러분, 안녕하세요,
여기 JSL 초보자! 여러 파일을 가져와야 합니다. 여기서 가져온 파일 이름에는 충족해야 하는 몇 가지 매개 변수가 있습니다.
- 특정 문자를 포함할 수 없습니다.이러한 문자는 항상 파일 이름 끝에 있습니다.
- 특정 문자열을 포함해야 합니다.
- 발견된 파일 이름 내에 동일한 문자열 세그먼트가 있는 경우 가장 최근의 시스템 날짜 및 시간 스탬프가 있는 항목만 가져옵니다. 파일 이름의 일부를 자르고 비교할 방법이 필요합니다.
예: "Apple"은 포함하고 "Tomato"는 포함하지 않는 모든 과일 스무디 음료를 원합니다. (파일 이름, 날짜 및 시간 YYYYMMDD HHMM)
Kiwi_Apple_Mango.csv 20220125 1421
Apple_Grape_Kiwi.csv 20220125 1243
Durien_Tomato.csv 20220126 1607
Apple_Grape_Kiwi_Tomato.csv 20220126 1537
Mango_Banana_Durien.csv 20220126 0915
Grape_Pineapple_Apple_Avocado.csv 20220126 0711
Apple_Grape_Kiwi.csv 20220127 1111
파일 이름에는 구조가 있습니다.내가 찾고 있는 문자열은 여러 구분 기호 뒤에 있습니다.
추가 질문
- 수천 개의 파일이 저장된 폴더에서 이러한 파일을 빠르게 검색할 수 있는 팁이 있습니까?초기 검색 후에는 확장명으로만 필터링할 수 있습니다. 현재 이 폴더에 있는 모든 파일을 검색하고 찾는 데에도 몇 분이 걸립니다.
- 점점 더 많은 파일을 가져오기 위한 팁이 있습니까? 가져온 파일의 수는 몇 달 안에 1000개를 넘어설 것입니다.그들 모두는 동일한 데이터 구조를 가지고 있습니다."비슷한 파일 쌓기"가 필요하다는 것을 알고 있습니다.이들은 모두 데이터 테이블입니다.
Words 및 Munger 기능을 찾아봤지만 파일 가져오기 스크립트를 완료하는 데 필요한 기능인지 잘 모르겠습니다.
데이터 접근윈도우Re: 여러 파일 가져오기, 파일 필터링감사합니다!Pat Regex가 포함된 항목 포함이 트릭을 수행하는 것 같습니다!
Re: 여러 파일 가져오기, 파일 필터링예, 하지만 어느 것이 귀하에게 가장 적합한지 말하기는 어렵습니다.
contains()를 사용하고 _ 구분 기호를 완전히 무시할 수 있습니다. 토큰인지는 모르겠지만 파인애플 그리고 사과 문제가 있든 없든 하나가 다른 하나를 포함하기 때문에 문제가 될 수 있습니다. 포도 그리고 그레이프 프루트 도. 대문자/소문자로 해결할 수 있습니까?
정규식에 대해 배우고 싶을 수도 있습니다. (나는 사용 regular-expressions.info .) 이 함수는 문자 일치 또는 숫자 누락 값을 반환합니다.
regex("applepearorange","carrot|pear")
참/거짓 답을 얻기 위해 isstring(...) 또는 ismissing(...)과 함께 사용할 수 있습니다. | 정규식에서 대안을 위한 것입니다.
contains_item()과 함께 정규식을 사용할 수도 있습니다. 이 빠른 테스트를 제외하고는 사용한 적이 없으며 이것이 패턴을 통과하는 유일한 방법입니다.
Contains Item( "apple_grapefruit_lime", Pat Regex( "carrot|grape" ), "_" )
즉, _에서 입력을 분할하고 정규식으로 각 세그먼트를 테스트합니다.
Re: 여러 파일 가져오기, 파일 필터링이제 아래와 같이 코드를 수정했으며 작동하지만 최적은 아닙니다. "abc"는 항상 단독이 아니며 구분 기호 "_" 사이에서 분리됩니다.예를 들어 때때로 "_xyzabc_" 또는 "_abcxyz_"가 있을 수 있습니다. 이 문자 세트를 찾기 위해 전체 문자열을 반복하는 함수가 있습니까?문자열은 항상 문자열 내의 특정 위치에 있습니다.
files_list = Files In Directory( "C:\Data\" );
dt = Current Data Table();
For( i = 1, i <= N Rows( dt ), i++,
if( Contains Item(:Column 1[i], "abc", "_") == 1,
dt <<DELETE row=""></DELETE>
Re: 여러 파일 가져오기, 파일 필터링문제의 일부가 내 if 문의 조건에 있음을 깨달았으므로 아래 코드로 수정했습니다.전체의 시작 하위 문자열을 검색하도록 코드를 편집하지 않는 한 항상 계속됩니다. 내가 찾고 있는 것은 문자열 내에 있고 앞뒤로 검색하는 경우 문자열의 시작 또는 끝만 테스트하는 것은 내가 찾고 있는 것이 아닙니다.
files_list = Files In Directory( "C:\Data\" );
dt = Current Data Table();
For( i = 1, i <= N Rows( dt ), i++,
if( contains(:Column 1[i], "abc") == 1,
dt <<DELETE row=""></DELETE>
Re: 여러 파일 가져오기, 파일 필터링안녕하세요, Files In Directory()를 사용하여 파일 이름 목록을 성공적으로 채웠습니다.Filter Each()를 조사했지만 원하는 만큼 많은 조건을 추가할 수 없기 때문에 For 루프에 중첩된 일부 조건부 If 문을 연결하려고 합니다. 배경에는 각 파일 이름의 dt가 각 행에 하나씩, 모두 단일 열에 있습니다.
기본적으로 !contains() 또는 contains()를 사용하여 각 요소를 검사하고 그에 따라 행을 삭제하거나 유지하려고 합니다.예, 이것이 " i " 카운터에 문제를 일으킬 것이라는 것을 알고 있습니다.카운터는 조정하기 쉽습니다. 그래도 한 걸음씩. 이 스크립트를 실행해도 오류가 뜨지 않고 아무 일도 일어나지 않습니다.디버거를 확인했는데 contains()에 대한 카운터 유형을 찾을 수 없었기 때문에 이것이 작동하지 않는 이유가 약간 혼란스럽습니다.어떤 통찰력?
files_list = Files In Directory( "C:\Data\" );
dt = Current Data Table();
For( i = 1, i <= N Rows( dt ), i++,
if( :Column 1[i] == contains(:Column 1[i], "abc"),
dt <<DELETE row=""></DELETE>
Re: 여러 파일 가져오기, 파일 필터링이 스레드로 돌아올 것이라고 말하고 싶었습니다. 현재 내 초점은 직장의 다른 곳에 있어야 합니다. 나는 잊지 않았다.
Re: 여러 파일 가져오기, 파일 필터링(격리 해제됨, 죄송합니다. 올바른 항목을 선택했으면 좋겠습니다. 플래그가 지정된 이유가 명확하지 않습니다.)
contains()는 FilesInDirectory(...)에서 반환된 파일 목록에서 요소별로 사용할 수 있는 함수입니다.
다음과 같은 파일 이름을 필터에 전달할 수 있습니다.
??사과*배*.csv
각 ? 1과 일치하고 각 *는 0 이상과 일치합니다.w9apple_fig_pear_grape.csv가 일치합니다.
아마 이런 식으로 사용할 수 있습니다
list = files in directory("$desktop",recursive(1));
list = filtereach({name},list,contains(name,".txt"));
namefilterdata = concatitems(list,";");
MFI 이름 필터에 전달할 값을 생성합니다.
MFI 괄호의 <
Re: 여러 파일 가져오기, 파일 필터링!Contains(part, "Tomato") 또는 Contains(part, "Apple")를 추가하면 검색 중인 폴더에서 파일 검색을 반복하면서 스크립트가 중단됩니다. 데이터 가져오기는 실제로 발생하지 않습니다. 왜 이런 일이 발생하는지에 대한 생각이 있습니까?
여기에 코드를 복사하고 싶지만 어떤 이유로 계속 스팸으로 보고됩니다.
Re: 여러 파일 가져오기, 파일 필터링안녕하세요.
스크립트에 포함을 추가하자마자 폴더에서 파일을 찾기 위해 루프를 계속 돌고 데이터를 가져오지 않습니다. 어떤 팁?
Multiple File Import(
<<SET folder=""></SET>
Re: 여러 파일 가져오기, 파일 필터링답장을 보내 주셔서 감사합니다.다음주 초까지 테스트해보고 다시 연락드리겠습니다.
여러 파일 가져오기, 파일 필터링먼저 파일 목록을 얻습니다. JMP에는 이 작업을 수행하는 방법이 많이 있으며 사용하는 방법은 속도 요구 사항(및 가능한 데이터 요구 사항)에 따라 다릅니다.사용할 수 있는 파일 목록을 얻으려면 운영 체제 명령을 사용할 수 있습니다(Windows 명령줄에는 dir이 있고 예를 들어 powershell에는 get-childitem(docs.microsoft.com) 파일 목록을 가져오거나 JMP로 직접 가져오려면 Files In Directory() 또는 Multiple File Import()를 사용할 수 있습니다(참조: 디렉토리 트리: 폴더가 사용하는 공간 탐색 MFI 예의 경우).
목록 또는 JMP 데이터 테이블에 파일 목록이 있으면 일부 알고리즘으로 필터링을 시작할 수 있습니다. 다음은 몇 가지 아이디어입니다.
- Ends With()를 사용하여 문자열의 끝을 확인합니다.
- 특정 문자열을 확인하려면 Contains()를 사용하고 다른 문자열을 제외하려면 !Contains()를 사용하십시오.
- 동일한 세그먼트의 경우(하나의 공통 단어, 단어 조합, 특정 순서의 단어...)Words() 및 Associative Arrays()가 여기에서 가장 유용합니다.
- 자세한 내용은 문자 함수에 대한 스크립팅 인덱스 섹션을 참조하십시오.
데이터 테이블이 어떻게 사용될지 모르면 초기 파일 목록을 로드하는 선택적 방법 외에 추가 요청에 대한 좋은 팁을 제공하기가 약간 어렵습니다. 한 가지 옵션은 일부 예약된 작업으로 데이터 테이블을 생성하여 사용자가 필요할 때 사용할 수 있도록 하는 것입니다.