2012-05-04 10 views
3

私は思っていたことはかなり単純ですが、何がうまくいかないのか分かりません。 ファイルを開いて、ファイルが存在しない場合や他の何かがある場合は、カスタムメッセージで失敗を試みます。OCamlの構文エラーです...

ここに私のコード(フランスのコメントを申し訳ありません):

if (argc = 1) then 
    aide() 
else 
    (* Si plus d'un argument, on récupère le type *) 
    if argc >= 2 then 
     let stage = int_of_string (Sys.argv.(1)) in 
      if stage != 0 && stage != 1 then 
       aide() 
      else 
       () 
    else 
     () 
    ;  
    (* Si plus de deux arguments, on récupère aussi l'entrée *) 
    if argc >= 3 then 
     let filename = Sys.argv.(2) in 
     let input = 
     try 
      open_in filename 
     with _ -> failwith ("Impossible d'ouvrir le fichier "^filename) 
    else 
     () 
    ; 
;; 

私が持つキーワードの構文エラーをしました。 誰かがアイデアを持っていますか?ありがとう。

答えて

4

inputを値にバインドしましたが、thenブランチに何も戻さなかったため、エラーが発生しました。

ブロックの後には、値inputを返して()を返す必要があります。

+0

«入力は»in_channel入力していなかったので、これは動作しません«始まる»を使用する必要があります

(print_endline ("Impossible d'ouvrir le fichier "^filename); exit 1) 
  • :あなたはすでにそのようにエラーメッセージを出力して終了しキャッチ単位。 – Thomash

  • +0

    私はOPが同じ種類の 'if/else'の2つの枝を作る方法を知っているべきだと指摘しました。 – pad

    0

    あなたの問題は、あなたのコードは何もしません。あなたは値«input»を定義しますが、使用しないでください.Ocamlは何もしないコードを好きではありません。 «failwith(^ファイル名 『fichierルドールouvrirインポッシブル』)私はあなたが使用したいとは思わない

    1. :あなたのコードの

      if (argc = 1) then 
          aide() 
      else begin 
          (* Si plus d'un argument, on récupère le type *) 
          if argc >= 2 then 
           let stage = int_of_string (Sys.argv.(1)) in 
            if stage != 0 && stage != 1 then 
             aide() 
            else 
             () 
          else 
           () 
          ;  
          (* Si plus de deux arguments, on récupère aussi l'entrée *) 
          if argc >= 3 then 
           let filename = Sys.argv.(2) in 
           let input = 
           try 
            open_in filename 
           with _ -> failwith ("Impossible d'ouvrir le fichier "^filename) 
           in 
           (* Le code principal du programme qui utilise la valeur input *) 
          else 
           () 
          ; 
      end;; 
      

      その他備考:あなたはこのような何かを書く必要があります»それは捕らえられない例外を発生させるためです。あなたはと«終了»

    関連する問題