I've been trying to pattern for the case where a user types in an invalid directory:
# let dir = Unix.opendir "adfalf";;
Exception: Unix.Unix_error (Unix.ENOENT, "opendir", "adfalf").
My function is as follows:
let files_of_dir d =
try
let dir = Unix.opendir d in
...
with
Unix_error (uerr, ucommand, dir) -> raise Not_found
Except I keep getting the compilation error:
Error: This variant pattern is expected to have type exn
The constructor Unix_error does not belong to type exn
I don't understand what I'm doing wrong w/ the pattern matching. If anyone could help me on this it would be greatly appreciated!
Some Other Notes:
I've been compiling my code using the following command on terminal:
ocamlbuild filename.byte
You need to say Unix.Unix_error, not just Unix_error. Note that this is what appears in your sample session.
Can any please help me why am I getting this error on running the Octave(version 3.8.1) code below-
a = input("");
b = input("");
printf("%d", a+b);
./CandidateCode.m: line 1: syntax error near unexpected token ('
./CandidateCode.m: line 1:a = input("");'
Please help me in resolving this error.
If you run your Script CandidateCode.m from shell, you have to add an interpreter with shebang:
Your CandidateCode.m:
#!/usr/bin/octave -q
a = input("");
b = input("");
printf("%d", a+b);
If you want to run it from within Octave, just execute "CandidateCode" (without ./ and .m)
I'm trying to find out how to convert an Erlang bitstring to a tuple, but so far without any luck.
What I want is to get from for example <<"{1,2}">> the tuple {1,2}.
You can use the modules erl_scan and erl_parse, as in this answer. Since erl_scan:string requires a string, not a binary, you have to convert the value with binary_to_list first:
> {ok, Scanned, _} = erl_scan:string(binary_to_list(<<"{1,2}">>)).
{ok,[{'{',1},{integer,1,1},{',',1},{integer,1,2},{'}',1}],1}
Then, you'd use erl_parse:parse_term to get the actual term. However, this function expects the term to end with a dot, so we have to add it explicitly:
> {ok, Parsed} = erl_parse:parse_term(Scanned ++ [{dot,0}]).
{ok,{1,2}}
Now the variable Parsed contains the result:
> Parsed.
{1,2}
You can use binary functions and erlang:list_to_tuple/1
1> B = <<"{1,2}">>.
<<"{1,2}">>
2> list_to_tuple([list_to_integer(binary_to_list(X)) || X <- binary:split(binary:part(B, 1, byte_size(B)-2), <<",">>, [global])]).
{1,2}
I am using the R package rjson to download weather data from Wunderground.com. Often I leave the program to run and there are no problems, with the data being collected fine. However, often the program stops running and I get the following error message:
Error in fromJSON(paste(raw.data, collapse = "")) : unclosed string
In addition: Warning message:
In readLines(conn, n = -1L, ok = TRUE) :
incomplete final line found on 'http://api.wunderground.com/api/[my_API_code]/history_20121214pws:1/q/pws:IBIRMING7.json'
Does anyone know what this means, and how I can avoid it since it stops my program from collecting data as I would like?
Many thanks,
Ben
I can recreate your error message using the rjson package.
Here's an example that works.
rjson::fromJSON('{"x":"a string"}')
# $x
# [1] "a string"
If we omit a double quote from the value of x, then we get the error message.
rjson::fromJSON('{"x":"a string}')
# Error in rjson::fromJSON("{\"x\":\"a string}") : unclosed string
The RJSONIO package behaves slightly differently. Rather than throwing an error, it silently returns a NULL value.
RJSONIO::fromJSON('{"x":"a string}')
# $x
# NULL
How do you concatenate bitstrings. I mean bitstrings because I do not know the number of bytes to be a multiple of 8.
A = <<3:2>>
B = <<1:1>>
C = <<15:4>>
Solution should A|B|C should be <<127:7>>
Thanks
Construct the binary using /bitstring and all the previous values. Here's an example, running in the erlang shell:
1> A = <<3:2>>.
<<3:2>>
2> B = <<1:1>>.
<<1:1>>
3> C = <<15:4>>.
<<15:4>>
4> D = <<A/bitstring, B/bitstring, C/bitstring>>.
<<127:7>>