-4

私はアーランで働いています

今、私は大きな問題を抱えています

テーブル mnesia からログを取得したいのですが、このログは Excel ファイルに書き込む必要があります

したがって、目標はテーブルmnesiaからExcelファイルにデータを書き込むことです

これは、このフォーラムで見つけたいくつかのコードに関連していると思います.txtファイルを書き込んで.txtファイルからExcelファイルにデータを転送するのが最善の方法です

このコードは、このフォーラムのこのリンクにあります。

exporttxt()->
     F = fun(T) -> mnesia:foldl(fun(X,Acc) -> [X|Acc] end, [],T) end,
{atomic,L} = mnesia:transaction(F(user)),
file:write_file("test.txt",[io_lib:format("~p\t~p\t~p~n",[F1,F2,F3]) || 
                 #user{id = F1,adress = F2,birthday = F3} <- L]).

しかし、このコードはエラーを生成します

4

2 に答える 2

0

コメントされているように、問題はリンク自体で明確に説明されています。コードが必要な場合は、ここにあります。ただし、コードに直接ジャンプする前に理解してください。

exporttxt()->
    F = fun() -> mnesia:foldl(fun(X,Acc) -> [X|Acc] end, [],user) end,
    {atomic,L} = mnesia:transaction(F),
    file:write_file("test.txt",[io_lib:format("~p\t~p\t~p~n",[F1,F2,F3]) || 
                     #user{id = F1,adress = F2,birthday = F3} <- L]).
于 2013-03-13T16:15:34.797 に答える
0

あなたが言及した主題で、私はコードをテストしなかったと言いました、そしてもちろん構文エラーがありました。これが実行されるコードです。

1> ok = mnesia:create_schema([node()]).
ok
2> rd(my_user,{firstname,lastname,age}).
my_user
3> ok =application:start(mnesia).
ok
4> {atomic,ok} = mnesia:create_table(my_user,[{attributes,record_info(fields,my_user)},{disc_copies,[node()]},{type,bag}]).
{atomic,ok}
5> Add_user = fun(Fn,Ln,Ag) ->
5>      F = fun() -> mnesia:write(my_user,#my_user{firstname=Fn,lastname=Ln,age=Ag},write) end,
5>      mnesia:activity(transaction,F)
5> end.
#Fun<erl_eval.18.82930912>
6> ok = Add_user("Georges","Boy",25).
ok
7> ok = Add_user("Joe","Armstrong",52).
ok
8> ok = Add_user("Pascal","Me",55).
ok
9> F = fun(T) -> mnesia:foldl(fun(X,Acc) -> [X|Acc] end, [],T) end.
#Fun<erl_eval.6.82930912>
10> {atomic,L} = mnesia:transaction(F,[my_user]).
{atomic,[#my_user{firstname = "Pascal",lastname = "Me",
                  age = 55},
         #my_user{firstname = "Joe",lastname = "Armstrong",age = 52},
         #my_user{firstname = "Georges",lastname = "Boy",age = 25}]}
11> ok = file:write_file("test.txt",[io_lib:format("~p\t~p\t~p~n",[F1,F2,F3]) || #my_user{firstname = F1, lastname = F2, age = F3} <- L]).
ok
12>

作業ディレクトリに test.txt という名前のファイルが作成されます。

"Pascal"    "Me"    55
"Joe"   "Armstrong" 52
"Georges"   "Boy"   25

これをエクセルで開くと、

ここに画像の説明を入力

しかし、これは直接使用すべきコード シーケンスではありません。

  • 1 行目は、アプリケーションの展開に使用するコードで実行する必要があります。
  • 行 2 は、シェルが次の行を理解するために必要なレコード定義です。モジュールまたはインクルード ファイルでは、-record(...) に置き換える必要があります。
  • 3 行目と 4 行目は、上位レベルのスーパーバイザーのいずれかの init 関数で実行する必要があります (既に開始されているアプリケーション、既存のテーブルをチェックするためのテストを行います...)
  • 5行目はサーバーのインターフェース定義にある必要があります
  • 行 6、7、8 は、一部のクライアントのユーザー インターフェイスによって生成される必要があります。
  • 別のインターフェイスの最後の行 9,10,11 (管理者用?)。

Lost_with_coding と仲間たちへのメッセージ

私があなたに私の意見を言うなら、あなたは燃えているステップです。Erlang の構文、パターン マッチングの概念、および変数境界をマスターすることに集中する必要があります。その後、リストやバイナリ内包表記などのより高度な構造を検討する必要があります。時間をかけてエラー メッセージを確認し、それらを使用して簡単な問題を解決してください。公式の Erlang ドキュメントは、この目的に最適です。私はいつもブラウザで開いており、知らない機能を探すときにこのリンクhttp://erldocs.com/R15B/を使用することもあります。

次に、高次関数、エラー処理、プロセス、同時実行性、OTP... に加えて、効率的ではあるが魅力的ではない Erlang ツール (tv、appmon、デバッガー...) の使用について説明します。

私は非常によくお勧めしますが、素晴らしい Fred Hebert の Web サイトhttp://learnyousomeerlang.com/を使用し、コピー/貼り付けではなくコードを書き直して、手順に従ってください。それは本当に努力する価値があります。

于 2013-03-13T19:39:41.310 に答える