Q&A's, tips, howto's
			
		
		
			
				
																			
								cormullion 							 
									
		Posts:  2038  		Joined:  Tue Nov 29, 2005 8:28 pm 		
		
																Location:  latiitude 50N longitude 3W 
							
							
				Contact: 
				
			 
				
		 
		
						
						
													
							
						
									
						Post 
					 
								by cormullion   »  Tue Jul 04, 2006 5:42 pm 
			
			
			
			
			Given a file coming in through the command line:
How can I find out what the directory of it is so that I can set the current directory to it?
The only thing I can see to do is to parse the filename, which seems like the non-newLISP way...
 
			
			
									
									
						 
		 
				
		
		 
	 
	 
				
		
		
			
				
																			
								Lutz 							 
									
		Posts:  5289  		Joined:  Thu Sep 26, 2002 4:45 pm 		
		
																Location:  Pasadena, California 
							
							
				Contact: 
				
			 
				
		 
		
						
						 
													
							
						
									
						Post 
					 
								by Lutz   »  Tue Jul 04, 2006 6:05 pm 
			
			
			
			
			you could use 
real-path  to get the full path and then isolate the path chopping off the filename from the end:
Code: Select all 
(join (chop (parse (real-path (main-args 2)) "/")) "/")
Lutz
 
			
			
									
									
						 
		 
				
		
		 
	 
	 
				
		
		
			
				
																			
								cormullion 							 
									
		Posts:  2038  		Joined:  Tue Nov 29, 2005 8:28 pm 		
		
																Location:  latiitude 50N longitude 3W 
							
							
				Contact: 
				
			 
				
		 
		
						
						 
													
							
						
									
						Post 
					 
								by cormullion   »  Tue Jul 04, 2006 9:13 pm 
			
			
			
			
			Thanks, Lutz! I was trying things like parse and even stuff like:
Code: Select all 
(reverse (member "/" (reverse (real-path f) )))
Yours looks more sensible.
I can imagine a more elegant solution one day - like if change-dir accepted a filename and found the containing directory ...
 
			
			
									
									
						 
		 
				
		
		 
	 
	 
				
		
		
			
				
																			
								Sammo 							 
									
		Posts:  180  		Joined:  Sat Dec 06, 2003 6:11 pm 		
		
											Location:  Loveland, Colorado USA 
							
						
		 
		
						
						 
													
							
						
									
						Post 
					 
								by Sammo   »  Tue Jul 04, 2006 9:31 pm 
			
			
			
			
			Following Lutz's lead, in Windows I can define:
Code: Select all 
(define (.. f)
  (join (chop (parse (real-path f) "\\") 2) "\\") )
(define (. f)
  (join (chop (parse (real-path f) "\\") 1) "\\") )
Then execute:
Code: Select all 
(change-dir (.. "c:\\path1\\path2\\path3\\filename.txt"))
to change the directory focus to c:/path1/path2, or:
Code: Select all 
(change-dir (. "c:\\path1\\path2\\path3\\filename.txt"))
to change the directory focus to c:/path1/path2/path3.
Something along these lines might be the ticket.
 
			
			
									
									
						 
		 
				
		
		 
	 
	 
				
		
		
			
				
																			
								cormullion 							 
									
		Posts:  2038  		Joined:  Tue Nov 29, 2005 8:28 pm 		
		
																Location:  latiitude 50N longitude 3W 
							
							
				Contact: 
				
			 
				
		 
		
						
						 
													
							
						
									
						Post 
					 
								by cormullion   »  Tue Jul 04, 2006 9:59 pm 
			
			
			
			
			Hi Sammo - nice to see you round here! I hadn't thought about the Windows backslash. Doesn't Windows now accept forward slashes? (Sorry I rarely use it at the moment.) So a generic function would be harder. 
 
I like the idea of defining '..' and '.' as functions...