部分パスとディレクトリ名を連結して、Elispでパス文字列を手動で構築しています。残念なことに、パスはスラッシュで終わることもあります。したがって、必要に応じてディレクトリ名を連結する前にスラッシュを挿入する必要がありますが、それ以外の場合は挿入しないでください。これを行うには良い方法は何ですか?通常通りElispでは、スラッシュを正しく挿入してパス文字列を取得する方法は?
答えて
(file-name-as-directory dir)
は、ディレクトリパスdir
に後ろにスラッシュを付け、必要に応じて1つ追加します。あなたは、リスト内のファイル名を含めたい場合
(let ((directory-list '("/foo" "bar/" "p/q/" "x/y"))
(file-name "some_file.el"))
(concat
(mapconcat 'file-name-as-directory directory-list "")
file-name))
"/foo/bar/p/q/x/y/some_file.el"
または代替として
、あなたがdirectory-file-name
を利用することができる:あなたがリストに部分パスのあなたの順序を持っていた場合
、あなたのような何かを行うことができますこれはありませんfile-name-as-directory
の反対:
(let ((path-list '("/foo" "bar/" "p/q/" "x/y/some_file.el")))
(mapconcat 'directory-file-name path-list "/"))
"/foo/bar/p/q/x/y/some_file.el"
(?ポータブルでない非ディレクトリにdirectory-file-name
を使用している場合誰かが私を修正してください)
このような何かあなたはそれがプラットフォームに依存するために少しそれを肉付けしたいと思いますが、出発点として動作するはず、など
(defun append-path-component (path new-part)
(if (string-match ".*/$" path)
(concat path new-part)
(concat path "/" new-part)))
、elispのいくつかのビットは、おそらくありますそれはすでに私が気づいていないことをしています。
(defun* tofilename (directorylist &optional (filename nil))
"concatenate directory names into a path, with an optional file name as last part"
(concat
(mapconcat 'directory-file-name directorylist "/")
"/"
filename))
(tofilename '("~/" "Temp/") "temp.txt")
;; => "~/Temp/temp.txt"
(tofilename '("~/" "Temp/"))
;; => "~/Temp/"
(tofilename '("~/" "Temp/" "test"))
;; => "~/Temp/temp/"
問題のあるコンテンツの一部からファイル名をアセンブルする最も簡単な方法は、expand-file-nameです。たとえば:
は(expand-file-name "foo.txt")
は、この一般的な形式は、デフォルトのディレクトリに基づいてあなたの完全なファイル名を与えます:
/home/me/foo.txt
ができますが、その内容は「/ホーム/彼らはある変数「DIR」を持っている場合/ subdir "を使用したい場合は、次のようにしてください:
(expand-file-name "foo.txt" dir)
dirが終了するかどうかは関係ありません。あなたが他のプラットホームにいて、他のスラッシュを含んでいれば、正しいこともします。ミックスはありますか?ちょうどそれらをスタック:
(expand-file-name "foo.txt" (expand-file-name "somesubdir" dir))
をあなたは本当に相対として相対ファイル名を保つことを気にしない限り、それは常により良いconcat
を避け、代わりにexpand-file-name
を使用することがあります。
2つの違いを説明する例を教えてください。 – qazwsx
- 1. 文字を&androidに正しく挿入する方法
- 2. JSTLで文字列を正しく分割する方法は?
- 3. JsonCPP値を文字列として取得する方法は?
- 4. Excel VBA - ユーザーのLDAP文字列を正しく取得する
- 5. タイマーを使用して文字列グリッド内の文字列の挿入ソートをアニメーション化する方法は?
- 6. EditTextを使用してAndroidで文字列を取得する方法は?
- 7. アンドロイドでURLを分割して文字列を取得する方法は?
- 8. C# - タブで文字列データを正しくインデントする方法
- 9. Pythonで関数名を文字列として取得する方法は?
- 10. PHPで文字列の正確な長さを取得する方法は?
- 11. LexとYaccで入力文字列全体を取得する方法は?
- 12. 文字列として取得しているHTMLタグからデータを取得する方法は?
- 13. 文字列をJSONに入れてJavaで値を取得する方法
- 14. javaで正規表現を使用して部分文字列を取得する方法は?
- 15. パターンを使用して文字列から文字列のリストを取得する方法は?
- 16. Libgdxで文字列の幅を取得する方法は?
- 17. Androidでプレフィックス文字列の値を取得する方法は?
- 18. 文字列値でカラーIDを取得する方法は?
- 19. Octaveで文字列の長さを取得する方法は?
- 20. Javaプレイフレームワークでクエリ文字列パラメータを取得する方法は?
- 21. HTMLの文字列でタイトルタグを取得する方法は?
- 22. Excelで同じ文字列値を取得する方法は?
- 23. クラスメンバオブジェクトを文字列名で取得する方法は?
- 24. この文字列を正しくエスケープする方法
- 25. PHPでMySQL検索文字列を正しく構築する方法は?
- 26. 文字列に文字を取り除く方法は?
- 27. Codeigniter:intを文字列に変換してデータベースに挿入する方法
- 28. 文字列を時刻に変換して挿入する方法MySQL
- 29. ダブルインターコンマを含む文字列の挿入方法は?
- 30. 文字列配列に新しい行を挿入して表示する方法は?
(Linux上では、ファイルパス内の二重シンボルは通常は/と解釈されます)、余分なものは問題にならないはずです。 – Tyler
これはすべてのプラットフォームで動作する必要があります。 – qazwsx