| Deutsch English Français Italiano |
|
<100dboq$1544i$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: et99 <et99@rocketship1.me>
Newsgroups: comp.lang.tcl
Subject: Re: Problems with paths of Windows
Date: Sun, 18 May 2025 12:17:44 -0700
Organization: A noiseless patient Spider
Lines: 73
Message-ID: <100dboq$1544i$1@dont-email.me>
References: <100ae16$fom5$1@dont-email.me> <100aepq$frvv$1@dont-email.me>
<ba04ce42-d26a-4adf-a9ac-45b5d5266e5e@yahoo.com>
<100co5a$10n61$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Sun, 18 May 2025 21:17:46 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="3fc69152c330c9119fca7e9b5bc332a7";
logging-data="1216658"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1//wgIf0DZhF7qJMHut2S88"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:dpC6nq7tESM1qRkY8q/LQW2Eakw=
Content-Language: en-US
In-Reply-To: <100co5a$10n61$1@dont-email.me>
Bytes: 3812
On 5/18/2025 6:41 AM, Alan Grunwald wrote:
> On 18/05/2025 03:36, Luis Alejandro Muzzachiodi wrote:
>> El 17/05/2025 a las 13:51, saito escribió:
>>> On 5/17/2025 12:37 PM, Luis Alejandro Muzzachiodi wrote:
>>>> Hello,
>>>>
>>>> I have a procedure that accepts a list of paths.
>>>> Assuming "$::env(SystemRoot)\my dir" is passed as a parameter, is there a way to process this so that it's interpreted correctly in the end?
>>>> I've tried combinations of { }, [list], [file normalize], [file nativename] but that didn't work.
>>>> (Working in Windows, tcl 8.6)
>>>>
>>>
>>> It is not clear what you are asking.
>>>
>>> Are you trying to append a parameter to a list? You do "lappend mylist $parameter"
>>>
>>> Are you trying to modify the Windows path env variable? It is just a string separated by commas: "append env(path) \;[join $mylist \;]"
>>
>> The question - generalizing - is how (if it is possible) to convert a path into a valid path if passed as a parameter to a procedure in the Windows format, for example, "c:\windows\my dir".
>> The specific question would be:
>> given the following procedure
>> proc myproc { listofpaths } {
>> foreach p $listofpaths {
>> puts "$p - is valid? : [file isdirectory $p]"
>> }
>> }
>> if a parameter is passed as "$::env(SystemRoot)\my dir"
>> the result obtained is
>> C:Windowsmy - is valid? : 0
>> dir - is valid? : 0
>> Then, is there a way to convert - within the procedure - that input into a valid directory?
>>
>> Alejandro
>>
>>
>>
>>
>>
> It seems that the caller is mangling the parameter; it will be too late by the time the proc is entered.
>
> I suggest you try passing [file join $::env(SystemRoot) "my dir"]. If you feel that lots of up-front, non-portable string manipulation is more readable you might prefer "$::env(SystemRoot)\\my dir".
>
> Alan
Just to (hopefully) add a little more clarity, one can see why that result occurs, with this:
% puts "$::env(SystemRoot)\my dir"
C:\WINDOWSmy dir
The \m became simply m, because of rule 9, \ followed by something NOT special (like \n), simply removes the \
Then the foreach treats it's input as though lindex were used on each item in a list:
% lindex "$::env(SystemRoot)\my dir" 0
C:WINDOWSmy
% lindex "$::env(SystemRoot)\my dir" 1
dir
Here, you are getting another round of substitution on the \W which likewise removed the \
which all together then, explains why those 2 results showed up.
In the above, one would actually need another \ as so:
% puts "|$::env(SystemRoot)\\my\ dir|"
|C:\WINDOWS\my dir|
with the ||'s added to hopefully add more clarity.
-e