nested case error

ke.han <>
Mon Jun 6 12:29:18 CEST 2005


Per,
Wow...thanks...I did read the bit syntax section..after severl badarg 
errors, I gave up trying to figure out the syntax and hard coded it.
YOur example is very imformative...thanks again.
ke han

Per Gustafsson wrote:
> Maybe you should have a look at the bit syntax. It is described in 
> chapter 6.16 of the erlang reference manual. It would allow you to 
> rewrite your function in the following manner:
> 
> setupSocket(State) ->
>    case gen_tcp:recv(State#state.sock, 0, ?server_idle_timeout) of
>      {ok, Bin} ->
>            <<Length:16,Major,Minor,Release,CType,SessionId:32,
>                UIdLength,UId:UIdLength/binary,
>                PwLength,Pw:PwLength/binary,_/binary>> = Bin,
>            Version = [Major,Minor,Release],
>            UserId = binary_to_list(UId),
>            Password = binary_to_list(Pw),
>            ClientType =
>                case CType of
>                    0 -> type1;
>                    1 -> type2;
>                    _ -> unknown
>                end,
>            
> io:format("Length\tVersion\tClientType\tSessionId\tUserIdLength\tUserId\tPasswordLength\tPassword",[]), 
> 
>            io:format("~p\t~p\t~p\t~p\t~p\t~p\t~p\t~p", [Length, Version, 
> ClientType, SessionId,
>                             UIdLength, UserId, PwLength, Password]);
>        Else ->
>            io:format("~p", [Else])
>     end.
> 
> Per Gustafsson
> 
>> Hello list,
>> I have tried many punctuation styles around this nested case code 
>> example, but can't get it to compile.
>> See line 15, where I have an end to the nested case and the last line 
>> where I end the outer case.  I apologize for email formating, its the 
>> best Thunderbird would do...
>> The compiler error on this code sample says I have an error before ';' 
>> on line 73 which is the end of the first clause of the outer case
>>
>> setupSocket(State) ->
>>     case gen_tcp:recv(State#state.sock, 0, ?server_idle_timeout) of
>>       {ok, Bin} ->
>>         [Two, One] = binary_to_list(Bin, 1, 2),
>>         Length = (Two * 256) + One,
>>         Version = [Major, Minor, Release] = binary_to_list(Bin, 3, 5),
>>                case binary_to_list(Bin, 6, 6) of
>>             [0] ->
>>                 ClientType = type1;
>>             [1] ->
>>                 ClientType = type2;
>>             [_Else] ->
>>                 ClientType = unknown
>>         end, %% end of inner case
>>         [Four, Three, Two, One] = binary_to_list(Bin, 7, 10),
>>         SessionId = (Four * 16777216) + (Three * 65536)+ (Two * 256) + 
>> One,
>>         UserIdLength = binary_to_list(Bin, 11, 11),
>>         UserId = binary_to_list(Bin, 12, 12 + UserIdLength),
>>         PasswordLength = binary_to_list(Bin, 13 + UserIdLength, 13 + 
>> UserIdLength),
>>         Password = binary_to_list(Bin, 14 + UserIdLength, 14 + 
>> PasswordLength),
>> io:format("Length\tVersion\tClientType\tSessionId\tUserIdLength\tUserId\tPasswordLength\tPassword",[]), 
>>
>>         io:format("~p\t~p\t~p\t~p\t~p\t~p\t~p\t~p", [Length, Version, 
>> ClientType, SessionId, UserIdLength, UserId, PasswordLength, 
>> Password];  %% ERROR here - end of outer case first clause
>>       Else ->
>>         io:format(~p, [Else]) %% end of outer case second clause
>>     end. %% end of outer case
>>
>>
>> thanks ke han
> 
> 
> 
> 




More information about the erlang-questions mailing list