2017-05-17 5 views
1

Ich schreibe ein TCL-Skript und ich möchte \ mit/ersetzen.So ersetzen Sie umgekehrten Schrägstrich () durch Schrägstrich (/) in TCL-Skript

#File directory 
set fDir "U:\scripts" 
#Replacment of \ with/in the directory path using regular expression 
regsub -all {\\} $fDir {/} fDir 
tk_messageBox -message $fDir 

Ich erhalte Ausgabe als: U: Skripte

Ich würde die Ausgabe wie gerne haben: U:/scripts

+0

Sie Verwenden Sie den Befehl zum Bearbeiten von Zeichenfolgen nicht, um mit dem Dateinamen und dem Pfad zu arbeiten. Es könnte viele unerwartete Probleme verursachen, abhängig vom Betriebssystem. Stattdessen sollten Sie TCL-Befehle wie 'file join',' file separator', 'file nativenname',' file normalize' usw. verwenden. Diese sind speziell für plattformunabhängige Manipulation mit einem Dateipfad implementiert. –

Antwort

3

Wenn Sie einen einzelnen umgekehrten Schrägstrich verwenden, versucht der Interpreter, eine Escape-Sequenz daraus zu konstruieren. Wenn es fehlschlägt, streift nur den umgekehrten Schrägstrich:

% set fDir "U:\scripts" 
U:scripts 

Um einen String mit einem Backslash in es zu bekommen, müssen Sie entweder die Zeichenfolge Klammer oder den Backslash:

% set fDir {U:\scripts} 
U:\scripts 
% set fDir U:\\scripts 
U:\scripts 

Dann können Sie verwenden Ihr regsub Aufruf, um die umgekehrten Schrägstriche zu Schrägstrichen zu ändern. Wenn Sie nicht das Gefühl, es ist notwendig, die lange Strecke durch einen regulären Ausdruck zu gehen, können Sie den speziellen Befehl für sie verwenden:

% set fDir [file normalize $fDir] 

Dokumentation:

file

Summary of Tcl language syntax

+0

Danke. Es könnte für andere hilfreich sein, wenn die letzte Zeile geändert wird, um fDir [Datei normalisieren $ fDir] zu setzen. – harishli2020

+0

Ich könnte 'string map' anstelle von' regsub' verwendet haben, aber das ist ansonsten perfekt (und einige Versionen von Tcl werden diesen Fall ohnehin intern optimieren). –

+0

@ harishli2020: Ich glaube, du kannst solche Änderungen selbst vornehmen, wenn du denkst, dass sie die Antwort verbessern. –

0

Versuchen

#File directory 
set fDir "U:\\scripts" 
#Replacment of \ with/in the directory path using regular expression 
regsub -all {\\} $fDir/fDir 
puts $fDir 

I getestet online editor und es funktionierte

Re sult ist

U:/scripts 
+0

Ja, es funktioniert. Aber es braucht einen zusätzlichen Schritt, um Backslash in einem langen Pfad mit doppelten Backslashes zu ersetzen. – harishli2020

Verwandte Themen