0

誰かがこのErlangコードを理解するのを手伝ってくれませんか

to_price_file(Line, OutputFile) ->
  Fields = csv:parse_line(Line),
  [SupplierID, ProductCode, Description, DeliveryDate, CostPrice, UnitCount] = Fields,
  Product = calculate_product(list_to_integer(SupplierID),list_to_integer(ProductCode),
                              Description, **date_utils:parse_date(DeliveryDate)**,
                              list_to_integer(CostPrice), list_to_integer(UnitCount)),
  ok = write_pricefile(Product, OutputFile),
  ok.

別のサブ関数parse_date(以下)が呼び出されます。

parse_date(DateString) ->
  Tokens = string:tokens(DateString, "/"),
  **[Year, Month, Day] = [list_to_integer(Str) || Str <- Tokens],
  {Year, Month, Day}.**

太字のコマンドがサブ関数で何をするのかわかりません。

ありがとう、アニッシュ

4

1 に答える 1

6

この関数は、日付文字列の形式が次のとおりparse_date/1であることを前提としています。"Year/Month/Day"

parse_date(DateString) ->
    Tokens = string:tokens(DateString, "/"),
    [Year, Month, Day] = [list_to_integer(Str) || Str <- Tokens],
    {Year, Month, Day}.

最初に呼び出しstring:tokens/2て、個別のフィールドのリストを返します。これ"/"は区切り文字列です。次に、呼び出しのすべての要素に対して値のリストを返すリスト内包表記を実行します。次に、パターンマッチングを使用してリストを個別の部分に分割し、値を含むタプルを返します。実行例の変数の値は次のようになります。Tokenslist_to_integer/1

DateString = "2013/03/08"
Tokens = ["2013","03","08"]
[Year,Month,Date] = [2013,3,8]
{2013,3,8}

リスト内包表記は非常に一般的であり、多くの場合、lists:map/2フィルタリングオプション(ここでは使用されていません)を使用して、リスト内のすべての要素に操作を適用する非常に簡潔な方法です。

ISO規格では、日付は2013-03-08と表記する必要があることに注意してください。:-)

于 2013-03-08T10:37:30.043 に答える