LoginSignup
0
0

More than 1 year has passed since last update.

概要

wsl(wsl2じゃない)でledgerやってみた。
練習問題、やってみた。

練習問題

elixirで損益計算書をtable表示せよ。

サンプルコード

defmodule Vs do
	use Agent
	def start_link() do
		Agent.start_link(fn -> 
			[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
		end, name: __MODULE__)
	end
	def get(p) do
		Agent.get(__MODULE__, fn v ->
			Enum.at(v, p)
		end)
	end
	def set(p, x) do
		Agent.update(__MODULE__, fn v ->
			List.update_at(v, p, fn _ -> 
	            x
            end)
		end)
	end
end
defmodule Main do
    def print(nil) do
        IO.puts "ok"
    end
    def print(l) do
		#IO.puts l
		l = String.trim l
		l = String.replace(l, "    ", "  ")
		l = String.replace(l, "-", "")
		s = String.split(l, "  ")
		#IO.puts Enum.at(s, 0)
        #IO.puts "#{Enum.at(s, 0)} !#{Enum.at(s, 1)} !#{Enum.at(s, 2)}<br>"
        cond do
		Enum.at(s, 1) == "Assets" ->
			Vs.set(0, Enum.at(s, 0))
		Enum.at(s, 1) == "パソコン" ->
			Vs.set(1, Enum.at(s, 0))
		Enum.at(s, 1) == "棚卸資産" ->
			Vs.set(2, Enum.at(s, 0))
		Enum.at(s, 1) == "現金" ->
			Vs.set(3, Enum.at(s, 0))
		Enum.at(s, 1) == "車" ->
			Vs.set(4, Enum.at(s, 0))
		Enum.at(s, 1) == "Equity" ->
			Vs.set(5, Enum.at(s, 0))
		Enum.at(s, 1) == "利益剰余金" ->
			Vs.set(6, Enum.at(s, 0))
		Enum.at(s, 1) == "資本金" ->
			Vs.set(7, Enum.at(s, 0))
		Enum.at(s, 1) == "Expenses" ->
			Vs.set(8, Enum.at(s, 0))
		Enum.at(s, 1) == "売上原価" ->
			Vs.set(9, Enum.at(s, 0))
		Enum.at(s, 1) == "支払利息" ->
			Vs.set(10, Enum.at(s, 0))
		Enum.at(s, 1) == "減価償却費" ->
			Vs.set(11, Enum.at(s, 0))
		Enum.at(s, 1) == "税金(費用)" ->
			Vs.set(12, Enum.at(s, 0))
		Enum.at(s, 1) == "Income:売上" ->
			Vs.set(13, Enum.at(s, 0))
		Enum.at(s, 1) == "Liabilities:借入金" ->
			Vs.set(14, Enum.at(s, 0))
		true ->
			Vs.set(15, Enum.at(s, 0))
		end
    end
    def main() do
        csv = """
               -1030  Assets
                -150    パソコン
                -150    棚卸資産
                -330    現金
                -400    車
                 300  Equity
                 100    利益剰余金
                 200    資本金
               -1270  Expenses
               -1000    売上原価
                 -20    支払利息
                -100    減価償却費
                -150    税金(費用)
                1600  Income:売上
                 400  Liabilities:借入金
--------------------
                   0
"""
        Enum.map(String.split(csv, "\n"), fn l ->
			print(l)
		end)
        {v13, _} = Integer.parse(Vs.get(13))  
        {v12, _} = Integer.parse(Vs.get(12))  
        {v11, _} = Integer.parse(Vs.get(11))  
        {v10, _} = Integer.parse(Vs.get(10))
        {v9, _} = Integer.parse(Vs.get(9))
        eig = v13 - v9
        kei = eig - v11 - v10
        tok = kei - v12
        IO.puts """
<!doctype html>
<html>
  <head>
    <style>
#sample2 th {
  color: #000;
  padding: 8px 15px;
  background: #eee;
  background:-moz-linear-gradient(#eee, #ddd 50%);
  background:-webkit-gradient(linear, 100% 0%, 100% 50%, from(#eee), to(#ddd));
  font-weight: bold;
  border-top:1px solid #aaa;
  border-bottom:1px solid #aaa;
  line-height: 120%;
  text-align: center;
  text-shadow:0 -1px 0 rgba(255,255,255,0.9);
  box-shadow:  2px 2px 1px rgba(0,0,0,0.1), 0px 1px 1px rgba(255,255,255,0.3) inset;
}
#sample2 th:first-child {
  border-left:1px solid #aaa;
  border-radius: 5px 0 0 0;	
  text-align: left;
}
#sample2 th:last-child {
  border-radius:0 5px 0 0;
  border-right:1px solid #aaa;
  box-shadow: 2px 2px 1px rgba(0,0,0,0.1);
  text-align: center;
}
#sample2 tr td {
  padding: 8px 15px;
  box-shadow: 2px 2px 1px rgba(0,0,0,0.1);
}
#sample2 tr td:first-child {
  border-left: 1px solid #aaa;
  text-align: left;
}
#sample2 tr td:last-child {
  border-right: 1px solid #aaa;
  box-shadow: 2px 2px 1px rgba(0,0,0,0.1);
  text-align: right;
}
#sample2 tr {
  background: #fff;
}
#sample2 tr:nth-child(2n+1) {
  background: #f5f5f5;
}
#sample2 tr:last-child td {
  border-bottom:1px solid #aaa;
  box-shadow: 2px 2px 1px rgba(0,0,0,0.1);
}
#sample2 tr:last-child td:first-child {
  border-radius: 0 0 0 5px;
}
#sample2 tr:last-child td:last-child {
  border-radius: 0 0 5px 0;
}
#sample2 tr:hover {
  background: #eee;
  cursor:pointer;
}
    </style>
  </head>
  <body>
    <h1>損益計算書</h1>
<table id="sample2">
  <tbody>
    <tr>
      <th>科目</th>
      <th>金額(千円)</th>
    </tr>
    <tr>
      <td>売上</td>
      <td>#{Vs.get(13)}</td>
    </tr>
    <tr>
      <td>売上原価</td>
      <td>#{Vs.get(9)}</td>
    </tr>
    <tr>
      <td>営業利益</td>
      <td>#{eig}</td>
    </tr>
    <tr>
      <td>減価償却費(車)</td>
      <td>#{Vs.get(11)}</td>
    </tr>
    <tr>
      <td>借入利息</td>
      <td>#{Vs.get(10)}</td>
    </tr>
    <tr>
      <td>経常利益</td>
      <td>#{kei}</td>
    </tr>
    <tr>
      <td>税金</td>
      <td>#{Vs.get(12)}</td>
    </tr>
    <tr>
      <td>当期利益</td>
      <td>#{tok}</td>
    </tr>
  </tbody>
</table>
  </body>
</html>
"""
	end
end
Vs.start_link
Main.main



実行結果

image.png

成果物

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0