12. 경로 다루기
파일 경로를 붙이고 나누고 정리하는 [경로] 모듈을 알아봐요.
[경로] 모듈은 사진/여행/바다.png 같은 경로 글자를 다뤄요. 붙이고, 폴더 이름과 파일 이름을 떼어 내고, 확장자를 바꾸고, ..이 섞인 경로를 깔끔하게 정리해요. 이 도구들은 글자만 만지고 컴퓨터의 파일은 들여다보지 않아서 브라우저에서도 그대로 돌아가요. 파일을 실제로 읽고 쓰는 건 Hana 런타임의 [파일] 모듈이 맡고, 둘을 함께 쓰면 좋아요.
| 도구 | 하는 일 |
|---|---|
<합치기>(조각, 조각, …) |
조각들을 /로 이어요 (빈 조각은 건너뛰고, /로 시작하는 조각이 나오면 거기서부터 다시 시작해요) |
<폴더이름>(경로) |
마지막 조각을 뺀 앞부분을 돌려줘요 (a/b/c.txt → a/b) |
<파일이름>(경로) |
마지막 조각을 돌려줘요 (a/b/c.txt → c.txt, a/b/처럼 /로 끝나면 빈 글자) |
<확장자>(경로) |
마지막 조각의 확장자를 점까지 돌려줘요 (c.tar.gz → .gz, .bashrc는 확장자가 없어요) |
<확장자뺀이름>(경로) |
확장자를 뺀 파일 이름이에요 (c.txt → c) |
<확장자바꾸기>(경로, 확장자) |
확장자를 바꿔요 ("md"처럼 점이 없어도 되고, ""이면 확장자를 없애요) |
<정리하기>(경로) |
//, ., 안쪽/..을 접어서 깔끔하게 만들어요 |
<절대경로인지>(경로) |
/(또는 C:/)로 시작하는지 참/거짓으로 알려줘요 |
<부분나누기>(경로) |
조각들의 목록으로 나눠요 (절대 경로면 맨 앞이 /예요) |
[경로]에서 <합치기>와 <파일이름>과 <폴더이름>을 가져오자
[경로]에서 <확장자>와 <확장자뺀이름>과 <확장자바꾸기>를 가져오자
'원본'을 [문자열]인 <합치기>("사진", "여행", "바다.png")로 정하자
'원본'을 출력하자
<폴더이름>('원본')을 출력하자
<파일이름>('원본')을 출력하자
<확장자>('원본')을 출력하자
<확장자뺀이름>('원본')을 출력하자
<확장자바꾸기>('원본', "jpg")를 출력하자
경로를 쓰는 규칙
- 조각을 나누는 글자는
/예요. 윈도우 경로처럼\로 써도/로 보고, 돌려주는 경로는 언제나/를 써요(윈도우도/를 알아들어요). - 맨 앞이
C:처럼 글자 하나와:이면 드라이브로 봐요.C:/data는 절대 경로이고C:data는 아니에요. - 도구는 경로가 실제로 있는지 확인하지 않아요. 없는 폴더의 경로도 얼마든지 만들 수 있어요.
정리하기와 나누기
<정리하기>는 .과 //를 지우고 안쪽/..을 서로 없애요. 위로 더 올라갈 곳이 없는 상대 경로의 ..은 남기고, / 바로 위로 가는 ..은 없어져요. 다 지워져서 아무것도 남지 않으면 .이에요.
[경로]에서 <정리하기>와 <절대경로인지>와 <부분나누기>를 가져오자
<정리하기>("a//b/./c/../d")를 출력하자
<정리하기>("../a/../..")를 출력하자
<정리하기>("/../a")를 출력하자
<정리하기>("a/..")를 출력하자
<절대경로인지>("/data/메모.txt")를 출력하자
<절대경로인지>("data/메모.txt")를 출력하자
<부분나누기>("/data/메모.txt")를 출력하자
<부분나누기>("data/./메모.txt")를 출력하자
오류를 내는 경우
도구마다 받는 값의 개수와 종류가 정해져 있어요. <파일이름>(1)처럼 글자가 아닌 값을 주거나 <합치기>()처럼 아무것도 주지 않으면 에러가 나요.
[파일]과 함께
폴더를 돌면서 확장자를 바꿔 옮기는 것처럼, 실제 파일을 다루는 일에서 이 도구들이 빛나요. [파일]은 Hana 런타임 문서에서 봤듯이 브라우저에서는 쓸 수 없으니, 아래 같은 스크립트는 컴퓨터의 Hana 런타임으로 돌려 보세요.
[파일]에서 <목록>과 <옮기기>를 가져오자
[경로]에서 <합치기>와 <확장자>와 <확장자바꾸기>를 가져오자
'이름들'을 [목록]인 <목록>("사진")으로 정하자
'이름들'의 '이름'마다 반복하자:
만약 (<확장자>('이름') == ".png") 라면:
<옮기기>(<합치기>("사진", '이름'), <합치기>("사진", <확장자바꾸기>('이름', "jpg")))를 실행하자