如何分割路径名。

问题描述 投票:0回答:3

输入为 C: est\deva cl ewfiles ug.txt

输出应该是“test”“deva”“tcl”“newfiles”

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

tcl
3个回答
5
投票

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

假设这是一个文件路径而不是一个恰好需要分割的随机字符串\

文件分割几乎可以满足你的需求,它返回分割为列表的路径。您还想使用 lrange 来选择除音量之外的所有内容,即类似(未经测试)

lrange [file split $path] 1 end-1

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

此外,如果您有机会获得目录路径而不是文件名,例如,您可能希望首先使用文件目录名重新测试时有同样的注意事项

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

0
投票

[split]
[lrange]
结合可以做你想做的事情,但以不可移植的方式。

使其更可移植的一种方法是使用调用

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

欲了解更多信息,请阅读thisthisthis


0
投票
set f "C:\test\deva\tcl\newfiles\aug.txt"
C:\test\deva\tcl\newfiles\aug.txt

set dname [file dirname [file normalize $f]
C:\test\deva\tcl\newfiles\

set fname [file rootname $f]
aug.txt

set ext [file extension $f]
.txt

file join  $dirname $fname
C:\test\deva\tcl\newfiles\aug.txt
© www.soinside.com 2019 - 2024. All rights reserved.