5

I'm writing a q script that loads a db in a particular path and does some processing on it. The location of the db is currently hardcoded in the script, but I want to pass the db path as an argument and get it to load from the path in the variable.

Currently it looks like this:

q) \l /path/to/dbDir        #Works

I figured out that .Q.l should let us do this using a variable, so I tried using the following in the script,

dbPath:`$.z.x 0
.Q.l hsym dbPath            #Fails

When running with argument /path/to/dbDir, the script always fails with some unreadable stuff and:

':/path/to/dbDir: No such file or directory

Could someone please help?

Daniel Krizian
  • 4,586
  • 4
  • 38
  • 75
Sahas
  • 10,637
  • 9
  • 41
  • 51

3 Answers3

5

\x ... is always equivalent to system"x ...", which is the general solution to the "how do i pass a variable to a \ command question

in your case, you want

system"l ",.z.x 0

(btw, i don't think .Q.l is involved in \l of code, only of data, so don't try to use it to load extra .q files)

Aaron Davies
  • 1,190
  • 1
  • 11
  • 17
4

.Q.l is synonymous with \l which only takes a single argument, which is not an hsym but a file or directory name.

Incidentally the unreadable stuff was the function definition, followed by a type error (as it was not expecting an hsym)

Thomas Smyth - Treliant
  • 4,993
  • 6
  • 25
  • 36
Matt
  • 76
  • 2
2

Okay, it seems to work when we try .Q.l without the hsym like this:

dbPath:`$.z.x 0
.Q.l dbPath
Sahas
  • 10,637
  • 9
  • 41
  • 51