【问题标题】:how to split path names.如何拆分路径名。
【发布时间】:2011-08-25 18:23:34
【问题描述】:

输入是 C:\test\deva\tcl\newfiles\aug.txt

输出应该是 "test" "deva" "tcl" "newfiles"

不应打印字符串末尾的“aug.txt”文件或任何其他“.txt”文件。

【问题讨论】:

  • 将问题标题更改为“路径名拆分”或“提取路径名的组成部分”。

标签: tcl


【解决方案1】:

恢复到我原来的解决方案并添加一些位...

假设这是一个文件路径,而不是碰巧需要拆分的随机字符串 \

File split 几乎可以满足您的需求,它返回拆分为 list 的路径。您还想使用 lrange 来选择除音量之外的所有内容,例如(未经测试)

lrange [file split $path] 1 end-1

所以你没有 c:\ 这应该是文件拆分返回的列表中的第一个元素

此外,如果您有可能获得目录路径而不是文件名,您可能希望首先使用文件目录名,例如同样的警告重新测试

lrange [file split [file dirname $name]] 1 end

【讨论】:

  • 我不明白你的意思。我需要知道的是如何将单词字符串与给定句子中的“\”分开。
  • 对不起,我改变了几次关于如何做的想法 - 现在更清楚了吗
  • C:\test\deva\tcl\new.txt 是一个输入,特定的字符串如 test、deva、tcl 必须显示在输出终端中。其余的 C:\ 和 new.txt 应该放过。
  • 对不起,我不明白你对 lrange 命令的意思。
  • lrange 去掉了列表的第一部分,因为它应该包含 c:\ 而你不希望这样
【解决方案2】:

[split][lrange] 结合可以做你想做的事,但以非便携的方式。

使这个更可移植的一种方法是使用调用[file separator] 的结果而不是裸“\”进行拆分。但是由于“/”在 Tcl 和 Windows 中也都可以,所以真正的可移植方式是在字符串上重复调用 [file dirname] 并使用 [file tail] 提取返回路径名的最后一个组件。

更多信息请阅读thisthisthis

【讨论】:

  • 每个建议都运行良好,但它没有做它需要做的事情。问题是当使用带有文件目录名的 lrange 时,该命令假定给定的输入作为单个字符串存储在变量“path”中,因此我们很难将其分解。
  • @deva,我忘记了 [file split] 可以满足您的需要(正如 jk 在他们的回答中最后提到的那样),所以我只是删除了我的帖子。
猜你喜欢
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 2011-05-24
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
相关资源
最近更新 更多