SAS: Jeu de dossier courant vers le dossier contenant le programme en cours d'exécution
J'ai juste commencé à apprendre le SAS parce que je suis tenu de l'utiliser pour un cours de statistiques. Pour ce cours, l'université offre de SAS 9.2 par le biais de leurs machines virtuelles de l'installation: - je faire une réservation dans leur système, ils génèrent une VM sur un de leurs serveurs, et je me connecter à la machine virtuelle à l'aide de Microsoft Remote Desktop client. Les machines virtuelles sont générés et effacé par session; les paramètres sont réinitialisés à chaque fois, et les fichiers doivent être stockés sur mon ordinateur client (qui est accessible dans la VM par un chemin d'accès UNC).
Dans cette configuration, lorsque j'ouvre un fichier de programme stocké sur mon ordinateur portable, je n'ai pu accéder à l'accompagnement des fichiers de données (chaque stockés dans le même dossier que le programme), soit par le coder en dur le chemin d'accès complet ou par la mise à jour de la "dossier en cours" au début de chaque session. La première est problématique, car cela signifie que le programme ne fonctionnera pas n'importe où ailleurs - en particulier, quand je l'envoyer par courriel au professeur. La deuxième est gênant, parce que la navigation sur ce chemin UNC est beaucoup de temps, et j'ai déjà de parcourir le même chemin pour ouvrir le fichier de programme.
Je veux rendre cela plus facile par programmation, réglage du dossier en cours dans le dossier contenant le programme. Ensuite, j'ai pu ouvrir le fichier et se rendre au travail. J'ai trouvé quelques exemples de obtenir le nom de fichier du fichier de programme, de obtenir le chemin d'accès à un fileref, et de (lien limite dépassée) réglage du dossier en cours, mais je n'ai pas été capable de les combiner dans le droit chemin. Veuillez relier les points pour moi.
OriginalL'auteur ShadSterling | 2013-01-19
Vous devez vous connecter pour publier un commentaire.
De programmation pour changer les Fenêtres répertoire courant de SAS, vous pouvez utiliser le
X
de commande, qui est ce qui se passe réellement lorsque vous utilisez la fonction "Changer de dossier" boîte de dialogue:Vous pouvez également le faire à l'aide de la
SYSTEM
données de l'étape de fonction, une méthode que je préfère, parce que vous obtenez un code de retour (mais le plus saisissant, bien sûr):Notez le chemin d'accès UNC est entouré de guillemets, ce qui est nécessaire si le chemin d'accès contient des espaces.
Bien sûr, cela vous oblige à taper dans la commande, mais il peut être quelque chose que vous pourriez ajouter à code source du programme. Si votre VM environnement vous a permis de maintenir une certaine présence permanente sur le serveur, vous pouvez enregistrer cette commande dans un fichier de démarrage.
Je voudrais demander à votre professeur pour obtenir des conseils; si vous travaillez avec des données, donné dans le cadre de votre classe, il suffit simplement d'envoyer le code source. D'autre part, si vous créez des données de sortie dans le cadre de votre mission, votre professeur souhaiterez peut-être de livrer le code source et les ensembles de données SAS. Certes, il ou elle aura une procédure.
Oui, il fonctionne avec un chemin d'accès UNC. Si vous envoyez la commande de X par lui-même (
x;
), SAS session de suspendre et un Windows boîte de commande doit s'ouvrir où vous pouvez taper des commandes. L'utiliser pour découvrir lacd
commande pour changer de répertoire. Typeexit
pour fermer la boîte et revenir à votre session SAS.Regarde comme il a échoué à cause d'un saut de ligne ai inséré dans le milieu de l'collé chemin... maintenant, il travaille pour une codé en dur chemin, mais pas pour un calculées chemin. Ma réponse partielle obtient le droit chemin, mais en utilisant
rc = system( 'cd "&src"' );
échoue. Ce qui me manque ici?Aussi, les fenêtres de commande de la boîte de dit "CMD ne prend pas en charge les chemins d'accès UNC que les répertoires actuels", donc je suppose que SAS n'est pas seulement l'exécution de chaque commande.
cmd.exe refuse d'utiliser un chemin d'accès UNC comme un répertoire en cours, mais une SAS peut utiliser un chemin d'accès UNC que c'est le dossier actuel. La chose surprenante est que la SAS X commande permet à un cd à un chemin d'accès UNC. Il semble que la SAS n'est pas juste de frai cmd.exe pour exécuter des commandes; la documentation dit "SAS intercepte la commande de changement de répertoire, puis des changements de route des commandes et des changements à son dossier en cours." (Je préfère une API avec des appels distincts plutôt que de intercepté des commandes.)
OriginalL'auteur BellevueBob
Réponse Complète:
SAS obtuse notation nécessite une étrange délimiteur de tripoter de combiner ma solution partielle (trouver le chemin d'accès) avec @Bob Duell la solution partielle (réglage du dossier en cours). Il semble y avoir deux grandes règles:
Donc la solution est de calculer une chaîne de la cité du chemin d'accès (d'où les guillemets font partie de la chaîne), et d'élargir la portée à l'intérieur d'un double-cité paramètre X ou d'un SYSTÈME:
Il n'est pas nécessaire pour stocker la chaîne, à la fois &src et &crsr peut être étendu en place, ce qui donne une instruction unique solution:
Ce qu'il s'exécute correctement, mais les sauts de la coloration de syntaxe dans l'interface graphique. Au sein d'une chaîne,
%str(%")
et""
à la fois d'élargir à"
, afin de remplacer%str(%")
avec""
fois qu'il s'exécute correctement et est de couleur correctement dans l'interface graphique:Ce hérite de la limitation qu'il ne fonctionne que lorsque SAS_EXECFILEPATH et SAS_EXECFILENAME sont définies, ce qui est le cas lors de l'exécution à partir de l'interface utilisateur Windows de l'éditeur. Il est également soumis à des restrictions relatives à la commande "cd", qui SAS intercepte plutôt que de se prévaloir de la ligne de commande de Windows. J'attends qu'il va échouer sur les chemins contenant des citations.
x "cd ""&SRC""" ;
Parce que je ne savais pas que c'était une option jusqu'à ce que j'ai lu votre commentaire. Quels critères devraient être utilisés pour choisir entre
""
et%str(%")
? Est-il un cas où ils ne sont pas équivalentes?Apparemment
"%str(%")"
confond l'interface graphique de l'analyseur, complètement briser la coloration syntaxique, même si elle s'exécute correctement.""
à la fois l'exécution et de la syntaxe-faits saillants correctement.Vous êtes en essayant de passer les guillemets pour la ligne de commande (dans ce cas, parce que votre chemin d'accès de fichier avec des espaces). Mais vous avez besoin de la macro variable pour résoudre trop, d'où la nécessité pour les double-doubles guillemets. SAS document le double-double de devis dans la SYSTASK documentation, support.sas.com/documentation/cdl/en/hostwin/63285/HTML/default/...
""
semble fonctionner dans n'importe quelle chaîne, et pas seulement pour SYSTASK. Je n'ai pas pu trouver une vue d'ensemble de la SAS de la chaîne de manutention (le plus proche que j'ai trouvé macro citant), mais il semble y avoir au moins 3 façons d'obtenir des guillemets dans une chaîne de caractères:""
,"%str(%")
etQUOTE(s)
.OriginalL'auteur ShadSterling
Une réponse partielle: Un moyen pour obtenir le dossier contenant à partir du nom de fichier du fichier de programme
Étaler & exploitation forestière suit:
Consolidés & silent:
Cela ne fonctionne que lorsque SAS_EXECFILEPATH et SAS_EXECFILENAME sont définis, et il n'est pas clair quand c'est. Il ne fonctionne pas lors de l'utilisation de l'interface utilisateur Windows de l'éditeur.
OriginalL'auteur ShadSterling