[인 스 턴 스] 문자열 정렬 적용

4872 단어
저자: amnesiac 첫 발: 공식 포럼 의 중국어 버 전
문자열 처 리 는 스 크 립 트 에서 가장 흔히 볼 수 있 는 동작 입 니 다. 물론 이 동작 에서 정규 표현 식 의 강 함 은 의심 할 여지 가 없 지만 대부분의 사람들 이 이 를 사용 하려 면 먼저 배 워 야 합 니 다.실제 적 으로 일반적인 문자열 처리 명령 / 함 수 는 subStr () 와 Instr () 의 기능 과 같은 일반적인 상황 을 해결 할 수 있 으 며, 본 고 는 구체 적 인 사례 로 Sort 의 일부 용법 의 유연 한 응용 을 소개 할 것 이다.
논단 에서 온 문제
편리 한 후에 분석 하기 위해 서 여기 서 전체 문 제 를 인용 합 니 다.
d: \ \ 1 \ 폴 더 아래 에 pdf 파일 이 잔뜩 있 습 니 다. 저 는 지금 Pdftk 로 합 치 려 고 합 니 다. 그런데 어떻게 페이지 크기 에 따라 정렬 합 니까?파일 이름 은 다음 과 같 습 니 다. 규칙 은 다음 과 같 습 니 다. 마지막 ~ 기호 시작 뒤에 페이지 가 있 습 니 다. 예 를 들 어 첫 번 째 는 166 페이지 에서 210 페이지 입 니 다. (1, 2, 3, 4, 5, 8, 9. pdf 는 처음부터 끝까지 배출 해 야 합 니 다. 0. pdf 라 고 생각 할 수 있 습 니 다.)
d:\1\E736B0D95D3C7D0D6D4EA4BF466F22D03yhiahzUahzU7904~166-210.pdf d:\1\B9DF7166549AC8737AC402DC5F132D5B3yhiahzUahzU7904~1-15.pdf d:\1\0C73455F2E19ECE5E903095930199CE33yhiahzUahzU7904~1,2,3,4,5,8,9.pdf d:\1\946349152F37C6BD5561E90C9C6D79463yhiahzUahzU7904~211-227.pdf d:\1\D3E0FF0E0DA73972F43A8DB89BD540153yhiahzUahzU7904~116-165.pdf d:\1\AD872772E42DCFA4254B978B5B724B0F3yhiahzUahzU7904~66-115.pdf d:\1\72EF1017BB29B0302F7E57419E8999D83yhiahzUahzU7904~16-65.pdf
어떻게 페이지 번호 에 따라 작은 것 부터 큰 것 까지 정렬 한 후에 변수 에 넣 을 수 있 습 니까?예 를 들 어 다음 과 같다.
A=d:\1\0C73455F2E19ECE5E903095930199CE33yhiahzUahzU7904~1,2,3,4,5,8,9.pdf B=d:\1\B9DF7166549AC8737AC402DC5F132D5B3yhiahzUahzU7904~1-15.pdf C=d:\1\72EF1017BB29B0302F7E57419E8999D83yhiahzUahzU7904~16-65.pdf ....
그리고 나 서 나 는 호출 할 수 있 었 다: run d: \ PDF tk \ bin \ pdftk. exe% A%% B%% C% output "d: \ 1 \ \ 합병. pdf"
문 제 를 구체 적 으로 분석 하 다.
우선, 이것 은 문자열 처리 에 속 하고 정렬 문제 입 니 다.문자열 정렬?자연히 Sort 명령 이 연상 된다.
  • 당신 이 아무 생각 이 없다 면 이것 은 기본 적 인 익숙 도가 향상 되 어야 합 니 다.많은 명령 이 일시 적 으로 사용 되 지 않 을 수도 있 지만 기본 적 인 이해 가 필요 합 니 다. 가장 기본 적 인 것 은 도움말 디 렉 터 리 와 명령, 함수 색인 을 보 는 것 부터 시작 할 수 있 습 니 다.

  • 그러나 대충 관찰 한 결과 Sort 를 직접 사용 하면 안 되 고 전기 처 리 를 해 야 한 다 는 것 을 알 수 있다. 예 를 들 어 d:\1\72EF1017BB29B0302F7E57419E8999D83yhiahzU~ahzU79~04~16-65.pdf 정렬 을 위해 먼저 16-65.pdf 로 전환 할 수 있다. 이것 은 문자열 을 통 해 교체 되 고 실제 적 으로 여러 가지 조작 방법 이 있 을 수 있다.
  • Instr () 를 통 해 마지막 ~ (또는 ~ahzU79~04~ 의 위 치 를 찾 은 다음 SubStr () 추출 (비슷 한 명령 을 자 유 롭 게 선택 할 수 있 습 니 다. 여 기 는 제 개인 습관 입 니 다);
  • 정규 표현 식 을 통 해 RegExReplace () 를 이용 하여 추출 합 니 다. 정규 학생 들 이 쉽게 고려 할 수 있 을 것 이 라 고 생각 합 니 다. 여 기 는 최 우선 으로 고려 하지 않 습 니 다.
  • 실제 파일 이름 을 바 꾸 고 새 파일 이름 을 정렬 한 다음 pdftk. exe 의 인자 로 직접 구성 할 수 있 습 니 다. (번 거 로 운 할당 없 이 A, B, C 에 할당 할 수 있 습 니 다) 또한 파일 이름 을 바 꾸 지 않 으 면 사용자 정의 정렬 (도움말 참조) 을 고려 해 야 합 니 다. 위 는 제 생각 입 니 다. 구체 적 인 방법 을 말씀 드 리 겠 습 니 다. 관심 이 있 으 면 먼저 시작 하 시 겠 습 니까?
    나의 실현 스 크 립 트
    실현 의 편리 성 여 부 는 도구 에 대한 익숙 함 정도 와 직접적인 관 계 를 가진다 (물론 문제 에 대한 이해 도 중요 하 다). 제 개인 적 인 관점 은 일반적인 스 크 립 트 를 사용 할 수 있 으 면 된다 는 것 입 니 다. 특별한 상황 이나 관심 이 없 으 면 많은 시간 을 들 여 최적화 하면 얻 는 것 보다 잃 는 것 이 많 을 수 있 습 니 다. 구체 적 인 스 크 립 트 를 보 세 요.
    Str = 
    (
    d:\1\E736B0D95D3C7D0D6D4EA4BF466F22D03yhiahzU~ahzU79~04~166-210.pdf
    d:\1\B9DF7166549AC8737AC402DC5F132D5B3yhiahzU~ahzU79~04~1-15.pdf
    d:\1\0C73455F2E19ECE5E903095930199CE33yhiahzU~ahzU79~04~1,2,3,4,5,8,9.pdf
    d:\1\946349152F37C6BD5561E90C9C6D79463yhiahzU~ahzU79~04~211-227.pdf
    d:\1\D3E0FF0E0DA73972F43A8DB89BD540153yhiahzU~ahzU79~04~116-165.pdf
    d:\1\AD872772E42DCFA4254B978B5B724B0F3yhiahzU~ahzU79~04~66-115.pdf
    d:\1\72EF1017BB29B0302F7E57419E8999D83yhiahzU~ahzU79~04~16-65.pdf
    )
    StringReplace, Str, Str, ~, ~~\, All
    Sort, Str, N \
    StringReplace, Str, Str, ~~\, ~, All
    MsgBox, % Str
    

    자세히 살 펴 보 니 대상 문자열 에서 비교 해 야 할 분자 문자열 은 모두 수치 이 고 이 하위 문자열 의 앞 문자 배열 은 비교적 고정 되 어 있 으 며 모두 ~ (더 길 면 ~ahzU79~04~ 입 니 다. 그러면 Sort 에서 \ 를 사용 하 는 조건 을 갖 추 었 기 때문에 대체 코드 가 나 왔 습 니 다.
    Sort, Str, N \
    

    비교 하기 전에 먼저 바 꾸 면 됩 니 다. 더 이상 군말 하지 않 겠 습 니 다. 재 미 있 는 것 은 제 가 Vim 에서 위의 코드 를 썼 을 때 더 간편 한 방법 을 발 견 했 습 니 다.
    Sort, Str, N P57
    

    57 번 째 문자 부터 비교 해 보면 이런 방법 은 관찰 덕분이다. 왜냐하면 나 는 Vim 에서 등관 자형 을 사용 하기 때문에 비교 대상 문자열 의 시작 위치 가 같다 는 것 을 한눈 에 알 수 있다 (위의 코드 블록 에서 도 알 수 있 지만 처음에 포럼 에서 문 제 를 보 았 을 때 나 는 발견 하지 못 했다). 분명히 이것 은 내 가 이전에 Sort 를 직접 사용 할 수 없 었 다 는 생각 을 깨 뜨 렸 다.
  • 비록 이곳 d:\1\0C73455F2E19ECE5E903095930199CE33yhiahzU~ahzU79~04~1,2,3,4,5,8,9.pdf 이 2 위 를 차지 하지만 이것 은 부차적인 문제 이다.
  • 마지막 으로 문 제 는 여기 서 끝 이 아 닙 니 다. 운용 의 묘 미 는 한마음 입 니 다. 좋 은 예 나 좋 은 문제 가 있다 면 교 류 를 환영 합 니 다. 저 는 응용 장면 을 자주 구성 하 는 것 을 공유 하기 위해 효과 가 이상 적 이지 않 습 니 다. 저 는 교과서 식 의 창백 하고 무력 함 을 생각 하 게 합 니 다. 실제 사용 은 그렇게 생동감 있 고 활발 합 니 다.
    필요 하 다
    앞에서 완벽 한 해결 을 말 하지 않 았 다. 정말 조심 할 뿐만 아니 라 지금 문제 가 생 겼 다. 849112292 는 문제 평론 에서 지적 했다.
    \ N 옵션 과 동시에 효과 가 나타 나 지 않 습 니 다.
    제 가 너무 부주의 해서 한 동안 많은 요점 을 쓰 지 않 고 잊 어 버 렸 습 니 다. 예전 에 번역 에 도움 을 주 었 을 때 이런 인상 이 매우 깊 었 습 니 다. 발견 하 셨 습 니까? 없 으 면 손 을 쓰 셨 습 니까? 생각 은 간단 합 니 다. 직접 위치 에 따라 순 서 를 매 깁 니 다. 수치 비 교 를 하려 면 먼저 이름 을 바 꿔 야 합 니 다. 스스로 정 의 된 순 서 는 여전히 통 합 니 다. 계속 문 제 를 발견 하 세 요. 하지만 생각 은 여기까지 만 분석 할 수 있 습 니 다.。

    좋은 웹페이지 즐겨찾기